【发布时间】:2012-12-13 14:31:21
【问题描述】:
我目前正在为一对立体相机编写一个 openCV 程序。 相机校准以及立体校准已完成。
下一步是从我得到的 2 张图像中找到一个特征在空间中的位置。这就是为什么我必须对图像进行立体校正并在之后进行计算。
initUndistortRectifyMap 面临的问题如下:
-如果我将由stereoRectify() 计算的 R1 或 R2 传递给 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(),显然您还没有这样做。请在您校准相机的地方发布代码:aishack.in/2010/07/… -
单个摄像头和两个摄像头都使用 StereoCalibrate() 进行校准。我检查了 StereoCalibratoin 中的 R 和 T 矩阵,它们是正确的。
-
代码太长,交织在一起无法发布。我会早点发布的。。
-
根据观看次数、投票数和您提出问题的方式,这个帖子很可能会死在这里。如果您得到答案,请在此处发布,您将获得支持,您的声誉越高,人们就越有可能帮助您。