我有兩個不同攝像機(不同分辨率)的立體校準參數。我想用這些數據進行立體聲矯正並計算視差圖。問題是兩臺相機的圖像尺寸不同,我不知道如何指定這些尺寸。假設這兩個圖像的大小相同,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