我目前正在爲一對立體相機編寫一個openCV程序。 攝像機校準以及立體聲校準完成。InitUndistortRectifyMap和Remap
下一步是從我得到的2張圖像中找到一個要素在空間中的位置。這就是爲什麼我必須立體聲矯正圖像並在之後進行計算。
我與initUndistortRectifyMap
面臨的問題如下:
- 如果我通過R1或R2通過stereoRectify()
到initUndistortRectifyMap()
我重新映射之後得到的黑色圖像計算。
- 如果我傳遞r(一個空矩陣)到initUndistortRectifyMap()
我在重新映射後得到未校正的圖像。我得到的圖像雖然有點扭曲。
我需要通過R1和R2到initUndistortRectifyMap()
來校正2個攝像頭,否則當傳遞空矩陣時,立體頭不會旋轉到同一個平面。
以下是我的代碼:
stereoRectify(intrinsic[0], distCoeffs[0], intrinsic[1], distCoeffs[1], imageSize,
R, T_Stereo, R1, R2, newP1, newP2, Q, CV_CALIB_ZERO_DISPARITY, -1, imageSize);
if (x_Cam.GetSerial()=="4002678487")
{
initUndistortRectifyMap(intrinsic[0], distCoeffs[0], R1, newP1, imageSize,
CV_16SC2 , mapx1, mapy1);
remap(x_Image, imageRectified[0],mapx1, mapy1, INTER_LINEAR);
return imageRectified[0];
}
if (x_Cam.GetSerial()=="4002702131")
{
//flip(in, in, -1);
initUndistortRectifyMap(intrinsic[1], distCoeffs[1], R2, newP2, imageSize,
CV_16SC2 , mapx2, mapy2);
remap(x_Image, imageRectified[1],mapx2, mapy2, INTER_LINEAR, BORDER_CONSTANT, 0);
return imageRectified[1];
}
我檢查所有矩陣值將在以stereoRectify()
,他們是正確的。旋轉矩陣R1和R2似乎也是正確的。我只是將黑色圖像作爲輸出。
我試着將R1和R2(例如R1 * R2)的垃圾值傳遞給InitUndistortRectifyMap()
來簡單地看到效果,我確實得到了奇怪的結果而不是黑色的圖像。
我假設你的問題是:「爲什麼'initUndistortRectifyMap()'返回黑色圖像,而不僅僅是奇怪的結果?下次嘗試明確你的具體問題。 –
你需要校準攝像頭,然後才能使用'initUndistortRectifyMap()',顯然你還沒有這樣做。請在校準相機的地方發佈代碼:http://www.aishack.in/2010/07/calibrating-undistorting-with-opencv-in-c-oh-yeah/ –
單臺攝像機的校準以及兩臺攝像機與StereoCalibrate()一起使用。我已經檢查了StereoCalibratoin中的R和T矩陣,它們是正確的。 – user1901213