我刚开始使用OpenCV中的Mono Camera Calibration。
因此,我使用以下示例代码
http://docs.opencv.org/doc/tutorials/calib3d/camera_calibration/camera_calibration.html
方便且写得很好。

现在的问题是,我使用横向和纵向图像作为输入。这些图像均为1600x1200像素,并显示一个棋盘,但是在某些图像中, View 旋转了90度。现在代码如下:

        view = imread(s.imageList[i], 1);
        if(view.empty())
            continue;

        remap(view, rview, map1, map2, INTER_LINEAR);
        imshow("Image View", rview);
        imwrite(s.imageList[i], rview);

重新映射(消除了扭曲)是成功的,但是所保存的图像被裁剪为风景图像。这意味着算法以某种方式尝试将未失真的图像放置为人像形状,结果是:
http://picload.org/view/lccorri/img_0197.jpg.html

有人得到了为什么吗?

最佳答案

问题出在整流图的计算中:

    initUndistortRectifyMap(cameraMatrix, distCoeffs, Mat(), getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, Size(1600,1600), 1, Size(1600,1600), 0),
        Size(1600,1600), CV_16SC2, map1, map2);

在这里,我有一个错误,对于图像的大小,我现在设置了Size(1600,1600),将大小固定为1600 x1600。现在,旋转图像(1200x1600)并不重要,它不会被裁剪。就目前而言,我感到满意,这当然不是最佳解决方案。

10-04 12:11