我刚开始使用OpenCV中的单色相机校准。 因此我使用了示例代码 http://docs.opencv.org/doc/tutorials/calib3d/camera_calibration/camera_calibration.html 这很方便,写得很好。
现在的问题是我使用横向和纵向图像作为输入。这些图像都是1600x1200像素并显示棋盘,但在其中一些图像中,视图旋转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
有人为此提出了一些意见吗?
答案 0 :(得分:2)
问题在于整顿图的计算:
initUndistortRectifyMap(cameraMatrix, distCoeffs, Mat(), getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, Size(1600,1600), 1, Size(1600,1600), 0),
Size(1600,1600), CV_16SC2, map1, map2);
这里我有一个错误,因为我现在设置尺寸(1600,1600)的图像尺寸,它将尺寸固定为1600 x 1600.现在无论图像是否旋转(1200x1600)它都不会裁剪。现在我很满意,当然这不是最好的解决方案。