Карта несоответствия OpenCV от веб-камер — код не работает

Вот код, который я написал, чтобы получить фид от двух веб-камер и получить текущую карту диспаратности. code::blocks возвращает -1 для этого, мои веб-камеры мигают, но ничего не происходит.

Мне нужно это зациклить, пока я не нажму 'q',

// Live depthmap

#include "cv.h"#include "cxmisc.h"#include "highgui.h"#include "cvaux.h"#include <vector>
#include <string>
#include <algorithm>
#include <stdio.h>
#include <ctype.h>

using namespace std;

int main(void) {

//Setup for finding stereo correspondences
CvStereoBMState *BMState = cvCreateStereoBMState();
assert(BMState != 0);
BMState->preFilterSize=41;
BMState->preFilterCap=31;
BMState->SADWindowSize=41;
BMState->minDisparity=-64;
BMState->numberOfDisparities=128;
BMState->textureThreshold=10;
BMState->uniquenessRatio=15;

IplImage *frameL = 0;
IplImage *frameR = 0;

CvCapture *captureL = 0;
CvCapture *captureR = 0;

char key = 's';

//Initialize left and right camera
captureL = cvCaptureFromCAM(0);
captureR = cvCaptureFromCAM(1);

CvSize imageSize = {640,480};

// preparing matrices
CvMat* img1r = cvCreateMat( imageSize.height,
imageSize.width, CV_8UC1 );
CvMat* img2r = cvCreateMat( imageSize.height,
imageSize.width, CV_8UC1 );
CvMat* disp = cvCreateMat( imageSize.height,
imageSize.width, CV_16S );
CvMat* vdisp = cvCreateMat( imageSize.height,
imageSize.width, CV_8U );
CvMat* img1rnew = cvCreateMat( imageSize.height,
imageSize.width, CV_8UC1 );
CvMat* img2rnew = cvCreateMat( imageSize.height,
imageSize.width, CV_8UC1 );

//loading in mapx and mapy xml
CvMat *mx1 = (CvMat *)cvLoad("mx1.xml",NULL,NULL,NULL);
CvMat *my1 = (CvMat *)cvLoad("my1.xml",NULL,NULL,NULL);
CvMat *mx2 = (CvMat *)cvLoad("mx2.xml",NULL,NULL,NULL);
CvMat *my2 = (CvMat *)cvLoad("my2.xml",NULL,NULL,NULL);

//loop till 'q' is entered
while( key != 'q' ){
frameL = cvQueryFrame(captureL);
frameR = cvQueryFrame(captureR);

IplImage* img1=frameL;
IplImage* img2=frameR;

// cloning img for remap
img1r=(CvMat *)cvCloneImage(img1);
img2r=(CvMat *)cvCloneImage(img2);

// remapping
cvRemap( img1, img1r, mx1, my1 );
cvRemap( img2, img2r, mx2, my2 );

// bm needs mat of type CV_8UC1
cvConvertImage(img1r, img1rnew, 0);
cvConvertImage(img2r, img2rnew, 0);

//block matching
cvFindStereoCorrespondenceBM( img1rnew, img2rnew, disp,
BMState);

cvNormalize( disp, vdisp, 0, 256, CV_MINMAX );

// show disparity map live from cam
cvNamedWindow( "disparity" );
cvShowImage( "disparity", vdisp );

// housekeeping
cvReleaseImage( &img1 );
cvReleaseImage( &img2 );
}
// housekeeping
cvReleaseStereoBMState(&BMState);

cvReleaseMat( &mx1 );
cvReleaseMat( &my1 );
cvReleaseMat( &mx2 );
cvReleaseMat( &my2 );
cvReleaseMat( &img1r );
cvReleaseMat( &img2r );
cvReleaseMat( &disp );

cvReleaseCapture(&captureL);
cvReleaseCapture(&captureR);

return(0);
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]