はじめに
当サイトでは、2D/3DのOpenCVプログラムを一つのプロジェクトに纏めて作成しています。理由は単に、Argument/Parameterを実行中のプログラムから、あとに実行するプログラムに引継ぐ事が楽だからです。
本稿では、プロジェクトの定義と設定項目を解説します。以下の3項目に分けて列記しています。
- Header & Definition in “CMFC_OpenCV_StereoDoc.cpp”
- Declaration Statement in “MFC_OpenCV_StereoDoc.h”
- “Settings” Class
それでは、参りましょう。
Header & Definition in “CMFC_OpenCV_StereoDoc.cpp”
//#include "opencv2/opencv.hpp" #include "opencv2/core.hpp" #include "opencv2/calib3d.hpp" //#include "opencv2/calib3d/calib3d.hpp" #include "opencv2/highgui.hpp" //#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc.hpp" #include "opencv2/imgcodecs.hpp" //#include "opencv2/imgproc/imgproc.hpp" //#include "opencv2/contrib.hpp" #include "opencv2/core/utility.hpp" #include "opencv2/ximgproc/disparity_filter.hpp" //#include "opencv2/ximgproc.hpp" #include <atlimage.h> #include <vector> #include <string> #include <algorithm> #include <iostream> #include <iterator> #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <sstream> #include <time.h> #include <Windows.h> #include <opencv_vtk_lib.hpp> #include <opencv2/viz.hpp> //#include <opencv2/viz/widget_accessor.hpp> //#include "ObjectDetector.hpp" //#include "PLYData.hpp" using namespace cv; using namespace ximgproc; using namespace std;
Declaration Statement in “MFC_OpenCV_StereoDoc.h”
Declaration of Edge-Detect function
//Declaration of Edge-Detect function -------------< Beginning of Code >------------------------ public: afx_msg void OnImageprocessEdgedetect(); -------------< End of Code >-----------------------
Declaration of image buffers and frames
//Declaration of image buffers and frames -------------< Beginning of Code >------------------------ public: /* Declare image buffers and frames */ /* For Camera 0 */ cv::VideoCapture cap0; // Image buffer cv::Mat frame0; // Image frame cv::Mat edges0; // Processed image frame (Edge detection) /* For Camera 1 */ cv::VideoCapture cap1; // Image buffer cv::Mat frame1; // Image frame cv::Mat edges1; // Processed image frame (Edge detection) /* For Camera 2 */ cv::VideoCapture cap2; // Image buffer cv::Mat frame2; // Image frame cv::Mat edges2; // Processed image frame (Edge detection) afx_msg void OnImageprocessChessboardcornerdetect(); afx_msg void OnImageprocess1cameracalibration(); cv::FileStorage fs; // cv::FileStorage fs2; // LPCWSTR lptext; // LPCWSTR lpcaption; //Size boardSize; static double CMFC_OpenCV_StereoDoc::computeReprojectionErrors(); static void CMFC_OpenCV_StereoDoc::calcChessboardCorners(); static bool CMFC_OpenCV_StereoDoc::runCalibration(); static void CMFC_OpenCV_StereoDoc::saveCameraParams(); static bool CMFC_OpenCV_StereoDoc::readStringList(); static bool CMFC_OpenCV_StereoDoc::runAndSave(); afx_msg void CMFC_OpenCV_StereoDoc::OnImageprocess2cameracalibration(); // class Settings; afx_msg void CMFC_OpenCV_StereoDoc::OnImageprocess3dptclouddisplay(); afx_msg void CMFC_OpenCV_StereoDoc::OnImageprocess3dptw(); afx_msg void OnImageprocessLeftRightCameraCalibration(); afx_msg void OnImageprocess3cameradisplay(); -------------< End of Code >-----------------------
“Settings” Class について、ひとこと
「../samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp」中に「class Settings」が入っています。それを、単に整理整頓のため、このプロジェクトのヘッダーファイル「MFC_OpenCV_StereoDoc.h」の最後尾に移動しました。内容は概ね無変更です。(Fisheye lensの部分だけは省きました。使う予定がありませんので…。)
Structure for 3D Point Cloud Display
更にひとこと、下記の Structure を”Settings” Classの後ろに追加しています。これは、3D Point Cloud Displayで使います。
struct Point3dRGB{ cv::Point3d point; uchar r; uchar g; uchar b; };
まとめ
如何でしたか。本稿では、プロジェクトの定義と設定項目を解説しました。最後までお読みいただき、ありがとうございました。