2011-07-15 90 views
6

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

在這方面的任何建議將不勝感激。

問候,

+0

如果添加了圖像及其立體校準信息,它將使人們更容易回答這個問題,以驗證他們的解決方案。 – misha

回答

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;}