OpenCv中两个不同相机的立体矫正

6

我有两个不同分辨率的摄像机的立体校准参数。我想将这些数据用于立体矫正和计算视差图。问题在于两个摄像机的图像大小不同,我不知道如何指定这些大小。cvStereoRectify只需要一个大小,假设两个图像具有相同的大小。

对此的任何建议将不胜感激。

敬礼,

Khan


如果您添加图像及其立体校准信息,将使回答此问题的人更容易验证他们的解决方案。 - mpenkov
2个回答

1

你尝试过在分辨率更高的相机上使用感兴趣区域吗?例如,假设你有一个640x480的相机和一个800x600的相机。你可以这样做:

VideoCapture videoLo(LOW), videoHi(HIGH);
Mat loRes, hiRes;

Point hiCenter(hiRes.size().width / 2, hiRes.size().height / 2);

int key = 0;
do
{
    videoLo >> loRes;
    videoHi >> hiRes;

    // this will give you the center 640x480 of the high res image.
    Mat hiResWin(hiRes, Rect(hiCenter.x - loRes.size().width / 2, 
                             hiCenter.y - loRes.size().height / 2,
                             loRes.size().width,
                             loRes.size().height));

    key = waitKey(33);
} while((char)key != 27);

希望这对你有所帮助!


1

我曾经在进行立体校准时遇到过同样的问题。通过设置图像大小参数可以解决这个问题。

    captureR = cvCreateCameraCapture( 0 );  // from camera 1
    cvSetCaptureProperty(captureR, CV_CAP_PROP_FRAME_WIDTH, 640);
    cvSetCaptureProperty(captureR, CV_CAP_PROP_FRAME_HEIGHT, 480);
    if(!captureR) { printf("\nCouldn't open the camera1\n"); return -1;}
    captureL = cvCreateCameraCapture( 1 ); //from camera 2
    cvSetCaptureProperty(captureL, CV_CAP_PROP_FRAME_WIDTH, 640);
    cvSetCaptureProperty(captureL, CV_CAP_PROP_FRAME_HEIGHT, 480);
    if(!captureL) { printf("\nCouldn't open the camera2\n"); return -1;}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接