I think
cvFindStereoCorrespondenceBM
requires IplImage
or cvMat
. Since you are using Mat
, you should use C++ API of OpenCV.
StereoBM sbm;
sbm.state->SADWindowSize = 23;
sbm.state->numberOfDisparities = 96;
sbm.state->preFilterSize = 25;
sbm.state->preFilterCap = 63;
sbm.state->minDisparity = 0;
sbm.state->textureThreshold = 20;
sbm.state->uniquenessRatio = 10;
sbm.state->speckleWindowSize = 25;
sbm.state->speckleRange = 8;
sbm.state->disp12MaxDiff = 1;
// change the parameters
sbm(left_c1, right_c1, stereo);
Since you are using Mat, you should try this and check if it works or not.
cvFindStereoCorrespondenceBM(left_C1, right_C1, stereo, state);
I don't know if this will work or not, but the C++ API StereoBM will surely work.
Try this and see if it works.
#define WIDTH 426
#define HEIGHT 320
You can define some size.
CvSize imageSize = {WIDTH,HEIGHT};
CvMat* frame1r = cvCreateMat( imageSize.height,imageSize.width, CV_8U );
CvMat* frame2r = cvCreateMat( imageSize.height,imageSize.width, CV_8U );
CvMat* disp = cvCreateMat( imageSize.height, imageSize.width, CV_16S );
CvMat* vdisp = cvCreateMat( imageSize.height,imageSize.width, CV_8U );
// Load image in frame1r and frame2r
cvFindStereoCorrespondenceBM( frame1r, frame2r, disp, state);
cvNormalize( disp, vdisp, 0, 256, CV_MINMAX );
cvShowImage( "disparity", vdisp );