opencv stereo vision depth map, code does not work

c++, depth, dictionary, opencv

Solution

Here's a code for disparity map using C++ API. Final image that you normalize should be of type CV_8UC1.

Mat img1, img2, g1, g2;
Mat disp, disp8;

img1 = imread("leftImage.jpg");
img2 = imread("rightImage.jpg");

cvtColor(img1, g1, CV_BGR2GRAY);
cvtColor(img2, g2, CV_BGR2GRAY);

StereoBM sbm;
sbm.state->SADWindowSize = 9;
sbm.state->numberOfDisparities = 112;
sbm.state->preFilterSize = 5;
sbm.state->preFilterCap = 61;
sbm.state->minDisparity = -39;
sbm.state->textureThreshold = 507;
sbm.state->uniquenessRatio = 0;
sbm.state->speckleWindowSize = 0;
sbm.state->speckleRange = 8;
sbm.state->disp12MaxDiff = 1;

sbm(g1, g2, disp);
normalize(disp, disp8, 0, 255, CV_MINMAX, CV_8U);

imshow("left", img1);
imshow("right", img2);
imshow("disp", disp8);

Problem

I am studying on stereo vision depth map and I am using the opencv library.I wrote a program to obtain depth map. But when program was run I obtained an empty depth map frame.can anybody help me please, what is wrong ? code are shown in below; ``` #include <opencv/highgui.h> #include <opencv/cv.h> #include <stdio.h> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <math.h> #include <opencv2/calib3d/calib3d.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/contrib/contrib.hpp> int main() { IplImage* img1 = cvLoadImage("/home/sezen/Masaüstü/imR.png"); IplImage* img2 = cvLoadImage("/home/sezen/Masaüstü/imL.png"); IplImage *rimage = cvCreateImage( cvSize( img1->width, img1->height ), IPL_DEPTH_8U, 1 ); cvCvtColor( img1, rimage, CV_RGB2GRAY ); IplImage *limage = cvCreateImage( cvSize( img2->width, img2->height ), IPL_DEPTH_8U, 1 ); cvCvtColor( img2, limage, CV_RGB2GRAY ); cvNamedWindow( "Right", CV_WINDOW_AUTOSIZE ); cvShowImage( "Right", rimage ); cvNamedWindow( "Left", CV_WINDOW_AUTOSIZE ); cvShowImage("Left", limage); CvMat *matr = cvCreateMat(rimage->height,rimage->width,CV_8UC1 ); CvMat *matl = cvCreateMat(limage->height,limage->width,CV_8UC1 ); CvMat* disp = cvCreateMat(rimage->height,rimage->width,CV_16S); CvMat* vdisp = cvCreateMat(rimage->height,rimage->width,CV_16S); cvConvert( rimage, matr ); cvConvert( limage, matl ); CvStereoBMState *BMState = cvCreateStereoBMState(); assert(BMState != 0); BMState->preFilterSize=21; BMState->preFilterCap=31; BMState->SADWindowSize=21; BMState->minDisparity=0; BMState->numberOfDisparities=128; BMState->textureThreshold=10; BMState->uniquenessRatio=15; cvFindStereoCorrespondenceBM( matr, matl, disp, BMState); cvNormalize(disp, vdisp, 0, 255, CV_MINMAX); cvShowImage("depthmap", vdisp); cvWaitKey(0); return 0; } ```

Original source