質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

4406閲覧

pointer-to-function 型に対する適切な operator() または変換関数のないクラス型のオブジェクトの呼び出しです

0625_hayato

総合スコア1

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/10/09 04:17

編集2020/10/14 02:03

前提・実現したいこと

研究でRealSenseで点群を利用した三次元物体認識を行うシステムを開発しています。
それにあたって、https://github.com/sakizuki/SSII2018_Tutorial_Open3D を動かしてイメージをつかんでみたいと思っています。
しかし、こちらのようなエラーが発生しており、ググりましたがよくわかりません。
具体的にどういったことが原因でこのエラーが起こっているのか、またこのエラーが起こらないためにはどのような策を講じればよいのかもご教授いただけると幸いです。

発生している問題・エラーメッセージ

pointer-to-function 型に対する適切な operator() または変換関数のないクラス型のオブジェクトの呼び出しです 55行目        →→→ rs2::frame depth_vis = color_map(aligned_frames.get_depth_frame()); //55行目 'im_d_vis'定義されていない識別子です 62行目        →→→ auto im_d_vis = frame_to_mat(depth_vis); //可視化用の距離画像 'im_d'定義されていない識別子です  71行目        →→→ sprintf( name_c,"image/image%05d.png", cnt );

該当のソースコード

C++

1#include <stdio.h> 2#include <stdlib.h> 3#include <librealsense2/rs.hpp> // Include RealSense Cross Platform API 4#include <opencv2/opencv.hpp> // Include OpenCV API 5 6using namespace cv; 7using namespace std; 8 9Mat frame_to_mat(const rs2::frame& f); 10Mat depth_frame_to_meters(const rs2::pipeline& pipe, const rs2::depth_frame& f); 11 12 13int main(int argc, char * argv[]) 14{ 15 system("rm -fr image"); 16 system("rm -fr depth"); 17 system("mkdir image"); 18 system("mkdir depth"); 19 20 // Declare depth colorizer for pretty visualization of depth data 21 rs2::colorizer color_map; 22 23 24 rs2::config cfg; //カメラの設定の定義 25 cfg.enable_stream(RS2_STREAM_COLOR, 640, 480, RS2_FORMAT_BGR8, 30); 26 cfg.enable_stream(RS2_STREAM_DEPTH, 640, 480, RS2_FORMAT_Z16, 30); 27 28 // Declare RealSense pipeline, encapsulating the actual device and sensors 29 rs2::pipeline pipe; 30 rs2::pipeline_profile selection = pipe.start(cfg); 31 auto sensor = selection.get_device().first<rs2::depth_sensor>(); 32 auto scale = sensor.get_depth_scale(); 33 34 cerr<<"Scale: "<<scale<<endl; 35 36 // Camera warmup 37 rs2::frameset frames; 38 for( int i=0 ; i<30 ; i++ ){ 39 frames = pipe.wait_for_frames(); 40 } 41 42 rs2::align align(RS2_STREAM_COLOR); 43 44 int cnt = 0; 45 char name_c[256], name_d[256]; 46 while(1){ 47 rs2::frameset data = pipe.wait_for_frames(); 48 auto aligned_frames = align.process(data); // RGB画像に対してDepth画像を位置合わせ 49 rs2::frame depth_vis = color_map(aligned_frames.get_depth_frame()); //←←←この行でエラーが出ています 50 rs2::frame depth = aligned_frames.get_depth_frame(); 51 rs2::frame color = aligned_frames.get_color_frame(); 52 53 // rs2のフレームからcv::Matへの変換 54 auto im_c = frame_to_mat(color); //RGB画像 55 auto im_d = frame_to_mat(depth); //距離画像 56 auto im_d_vis = frame_to_mat(depth_vis); //可視化用の距離画像 57 im_d *= 1000.0*scale; // 画素値をミリスケールに変換 58 59 // Update the window with new data 60 imshow("Depth", im_d_vis); 61 imshow("RGB", im_c); 62 63 waitKey(1); 64 65 sprintf( name_c,"image/image%05d.png", cnt ); 66 sprintf( name_d,"depth/depth%05d.png", cnt ); 67 68 imwrite( name_c, im_c); 69 imwrite( name_d, im_d); 70 cerr<<"Frame: "<<cnt<<endl; 71 cnt++; 72 } 73 74 return 0; 75} 76 77// Convert rs2::frame to cv::Mat 78cv::Mat frame_to_mat(const rs2::frame& f) 79{ 80 using namespace cv; 81 using namespace rs2; 82 83 auto vf = f.as<video_frame>(); 84 const int w = vf.get_width(); 85 const int h = vf.get_height(); 86 87 if (f.get_profile().format() == RS2_FORMAT_BGR8) 88 { 89 //cerr<<"RS2_FORMAT_BGR8"<<endl; 90 return Mat(Size(w, h), CV_8UC3, (void*)f.get_data(), Mat::AUTO_STEP); 91 } 92 else if (f.get_profile().format() == RS2_FORMAT_RGB8) 93 { 94 //cerr<<"RS2_FORMAT_RGB8"<<endl; 95 auto r = Mat(Size(w, h), CV_8UC3, (void*)f.get_data(), Mat::AUTO_STEP); 96 cv::cvtColor(r, r, cv::COLOR_BGR2GRAY); 97 return r; 98 } 99 else if (f.get_profile().format() == RS2_FORMAT_Z16) 100 { 101 //cerr<<"RS2_FORMAT_Z16"<<endl; 102 return Mat(Size(w, h), CV_16UC1, (void*)f.get_data(), Mat::AUTO_STEP); 103 } 104 else if (f.get_profile().format() == RS2_FORMAT_Y8) 105 { 106 //cerr<<"RS2_FORMAT_Y8"<<endl; 107 return Mat(Size(w, h), CV_8UC1, (void*)f.get_data(), Mat::AUTO_STEP);; 108 } 109 110 throw std::runtime_error("Frame format is not supported yet!"); 111} 112

補足情報(FW/ツールのバージョンなど)

windows10
Visual studio 2017
RealSense SDK2.0
OpenCV 4.3.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki23

2020/10/09 04:40

55行目はどこでしょうか?
0625_hayato

2020/10/09 05:16

rs2::frame depth_vis = color_map(aligned_frames.get_depth_frame()); というところです。 color_mapのクラス型?が pointer-to-functionに変換できないということなのでしょうか?
fana

2020/10/09 05:26

> rs2::colorizer color_map; color_map は rs2::colorizer 型. > color_map(aligned_frames.get_depth_frame()) aligned_frames.get_depth_frame()が何型になるのかわかりませんが,その型を引数に取る operator() が rs2::colorizer 型に存在しない,ということでは.
0625_hayato

2020/10/09 06:44

ということは、rs2::colorizer 型(pointer-to-function型)のoperator()に対応する型でaligned_frames.get_depth_frame()を渡してあげると解決するということでしょうか?
fana

2020/10/09 06:53

rs2::colorizer 型にoperator()が存在するのかどうかから確認してみてはいかがでしょうか. (この型名でググるとリファレンスらしきページがトップに出てくるようです.) 知らないライブラリなので当てずっぽうですが, rs2::frame depth_vis = color_map.process(aligned_frames.get_depth_frame()); みたいな形でメソッドを呼ぶべきところだったりはしないのでしょうか?
0625_hayato

2020/10/14 01:20

ご指摘ありがとうございました、リファレンスではreturn process(depth)となっていたため試したところ、 rs2::frame depth_vis = color_map.process(aligned_frames.get_depth_frame()); でエラー解消できました!ご協力いただき感謝します!
fana

2020/10/14 01:35

こちらは本当にリファレンスをぱっと見した感じでそれっぽい雰囲気の "process" を例として挙げただけでしたので,それが役に立ったとしても「たまたま」です. 本当にその修正が妥当である(単に文法エラーが無くなるだけじゃなくて,実際にまともに動作する形になる)ことをご自身で確認できたのであれば,それは「自己解決」であろうと思うので,自己解決の形にしておく(ご自身で回答を書いて,それをBAにする)と良いかと思います.
0625_hayato

2020/10/14 01:59

プログラム自体はまだ動いていません。 このエラーを解決すれば治ると思っていた62行目の auto im_d_vis = frame_to_mat(depth_vis); で'im_d_vis'が定義されていない識別子ですと出てきます。 また、こちらも解決すると思っていた71行目の sprintf( name_c,"image/image%05d.png", cnt ); で'im_d'(なぜここで)が定義されていない識別子ですと出てきます。
fana

2020/10/14 02:16

それらの行でそのようなエラーが出ると言うのは謎ですね. 例えば, while(1){ /* この中身を一旦全てコメントアウト */ } みたいなことをすればコンパイルは通るか? 通るならば,コメントアウトした部分の上から数行だけを元に戻してもコンパイルは通るか? 通るならばさらにその下の数行を… みたいなことをしてみて,どの行がコードに加わった際にエラーが発生するのかを突き止めてみてはどうでしょうか.
0625_hayato

2020/10/14 03:15

行ってみました。するとどうやら54行目 auto aligned_frames = align.process(data); の行を入れると先ほど出たエラーが出現します。 aligned_framesが怪しそうです。
fana

2020/10/14 04:00

ループ内の処理が while(1){ rs2::frameset data = pipe.wait_for_frames(); auto aligned_frames = align.process(data); } という2行しか無い状態でコンパイルエラーということですか?
0625_hayato

2020/10/14 05:13

すみません、もう一度やり直すと66行目 imshow("Depth", im_d_vis); を含めると62行目でim_d_visが定義されていないとエラーが出ました。 また、im_dの定義エラーは75行目 imwrite( name_d, im_d); を含めるとエラーが出ました。
fana

2020/10/14 05:25

未定義という旨のエラーが出る理由はちょっとわからないです…
0625_hayato

2020/10/14 07:43

わかりました! ここまでご丁寧に対応していただき、ありがとうございました! 自分で頑張ってみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問