前提・実現したいこと
研究で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
あなたの回答
tips
プレビュー