我有两个不同摄像机(不同分辨率)的立体校准参数。我想用这些数据进行立体声矫正并计算视差图。问题是两台相机的图像尺寸不同,我不知道如何指定这些尺寸。假设这两个图像的大小相同,cvStereoRectify只取一个大小。OpenCv中两个不同摄像机的立体校正
在这方面的任何建议将不胜感激。
问候,
汗
我有两个不同摄像机(不同分辨率)的立体校准参数。我想用这些数据进行立体声矫正并计算视差图。问题是两台相机的图像尺寸不同,我不知道如何指定这些尺寸。假设这两个图像的大小相同,cvStereoRectify只取一个大小。OpenCv中两个不同摄像机的立体校正
在这方面的任何建议将不胜感激。
问候,
汗
您是否尝试过使用更高分辨率的相机感兴趣的区域?例如,假设您有一个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);
希望对您有所帮助!
执行立体校准时,我遇到同样的问题。 它可以通过设置图像大小来解决参数
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;}
如果添加了图像及其立体校准信息,它将使人们更容易回答这个问题,以验证他们的解决方案。 – misha