Добрый день! Стоит задача построить карту глубины по двум изображениям, но ничего не выходит. В программировании новичок. Не подскажете в чем может быть проблема? Нужна ли при данной задаче калибровка, если изображения загружаются из файла? И зачем?
Вот код моей программы:
int main(int argc, char **argv) {
IplImage *Limage = 0, *Rimage = 0, *Lgray = 0, *Rgray = 0, *dstr = 0;
Limage = cvLoadImage("leftImg.jpg", 0);
if (Limage == NULL)
{
fprintf(stderr, "ERROR: Could not load left image %s\n");
return 1;
}
Rimage = cvLoadImage("rightImg.jpg", 0);
if (Rimage == NULL)
{
fprintf(stderr, "ERROR: Could not load right image %s\n");
return 1;
}
Lgray = cvCreateImage(cvGetSize(Limage), Limage->depth, 1);
Rgray = cvCreateImage(cvGetSize(Rimage), Rimage->depth, 1);
cvConvertImage(Limage, Lgray, CV_BGR2GRAY);
cvConvertImage(Rimage, Rgray, CV_BGR2GRAY);
CvMat *Stereo = cvCreateMat(Limage->height, Limage->width, CV_16S);
if (Stereo == NULL)
{
fprintf(stderr, "ERROR: Could not create depth map %s\n");
return 1;
}
CvStereoBMState* state = cvCreateStereoBMState();
if (state == NULL)
{
fprintf(stderr, "ERROR: Could not create CvStereoBMState\n");
return 1;
}
state->SADWindowSize = 23;
state->numberOfDisparities = 96;
state->preFilterSize =25;
state->preFilterCap = 63;
state->minDisparity = 0;
state->textureThreshold = 20;
state->uniquenessRatio = 10;
state->speckleWindowSize = 25;
state->speckleRange = 8;
state->disp12MaxDiff = 1;
cvFindStereoCorrespondenceBM(Lgray, Rgray, Stereo, state);
cvNamedWindow("cvHoughCircles", 1);
cvShowImage("cvHoughCircles", Stereo);
cvNamedWindow("left", CV_WINDOW_AUTOSIZE);
cvNamedWindow("right", CV_WINDOW_AUTOSIZE);
cvShowImage("left", Lgray);
cvShowImage("right", Rgray);
cvWaitKey(0);
cvReleaseImage(&Limage);
cvReleaseImage(&Rimage);
cvReleaseImage(&Lgray);
cvReleaseImage(&Rgray);
cvDestroyAllWindows();
return 0;