From 1aaca92ed617eab1cffb88fddff7a1e3df1df38b Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nwpope@utu.fi> Date: Wed, 13 Mar 2019 10:59:55 +0200 Subject: [PATCH] SGBM disparity experiment --- cv-node/src/main.cpp | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/cv-node/src/main.cpp b/cv-node/src/main.cpp index 026a5da7f..385a5928f 100644 --- a/cv-node/src/main.cpp +++ b/cv-node/src/main.cpp @@ -3,6 +3,12 @@ #include <ftl/synched.hpp> #include <ftl/calibrate.hpp> +#include "opencv2/imgproc.hpp" +#include "opencv2/imgcodecs.hpp" +#include "opencv2/highgui.hpp" +#include "opencv2/core/utility.hpp" +#include "opencv2/ximgproc.hpp" + #include <glog/logging.h> #include <string> @@ -13,6 +19,9 @@ using std::string; using std::vector; using cv::Mat; +using namespace cv; +using namespace cv::ximgproc; + static vector<string> OPTION_peers; static vector<string> OPTION_channels; static string OPTION_calibration_config = FTL_CONFIG_ROOT "/calibration.xml"; @@ -88,9 +97,25 @@ int main(int argc, char **argv) { if (!calibrate.isCalibrated()) { LOG(WARNING) << "Cameras are not calibrated!"; } + + int max_disp = 256; + int wsize = 5; + Ptr<DisparityWLSFilter> wls_filter; + + Ptr<StereoSGBM> left_matcher = StereoSGBM::create(10,max_disp,wsize); + left_matcher->setP1(24*wsize*wsize); + left_matcher->setP2(96*wsize*wsize); + left_matcher->setPreFilterCap(31); + left_matcher->setMode(StereoSGBM::MODE_SGBM_3WAY); + wls_filter = createDisparityWLSFilter(left_matcher); + Ptr<StereoMatcher> right_matcher = createRightMatcher(left_matcher); + /*Ptr<StereoBM> left_matcher = StereoBM::create(max_disp,wsize); + //left_matcher->setPreFilterCap(63); + wls_filter = createDisparityWLSFilter(left_matcher); + Ptr<StereoMatcher> right_matcher = createRightMatcher(left_matcher);*/ while (true) { - Mat l, r; + Mat l, r, left_disp, right_disp; calibrate.undistort(l,r); //lsrc->get(l,r); @@ -106,9 +131,18 @@ int main(int argc, char **argv) { // TODO Pose and disparity etc here... + cvtColor(l, l, COLOR_BGR2GRAY); + cvtColor(r, r, COLOR_BGR2GRAY); + //matching_time = (double)getTickCount(); + left_matcher-> compute(l, r,left_disp); + right_matcher->compute(r,l, right_disp); + // matching_time = ((double)getTickCount() - matching_time)/getTickFrequency(); + // TODO Send RGB+D data somewhere + + normalize(left_disp, left_disp, 0, 255, NORM_MINMAX, CV_8U); - cv::imshow("Left",l); + cv::imshow("Left",left_disp); if (lsrc->isStereo()) cv::imshow("Right",r); if(cv::waitKey(20) == 27){ -- GitLab