小编use*_*213的帖子

InitUndistortRectifyMap和Remap

我目前正在为一对立体相机编写openCV程序.完成了摄像机校准和立体声校准.

下一步是从我得到的2张图像中找到一个特征在空间中的位置.这就是为什么我需要Stereo整理图像并在之后进行计算.

我面临的问题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];
}
Run Code Online (Sandbox Code Playgroud)

我检查了所有的矩阵值stereoRectify(),它们是正确的.旋转矩阵R1和R2似乎也是正确的.我只是将黑色图像作为输出. …

c++ camera opencv

7
推荐指数
2
解决办法
1万
查看次数

标签 统计

c++ ×1

camera ×1

opencv ×1