【问题标题】:OpenCV Remapping crops my Landscape ImageOpenCV Remapping 裁剪我的风景图像
【发布时间】:2014-07-16 05:29:12
【问题描述】:

我刚开始使用 OpenCV 中的 Mono Camera Calibration。 因此我使用来自的示例代码 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

有人知道为什么会这样吗?

【问题讨论】:

  • rotated 90 degrees 你的意思是你有 1200x1600px 的图片吗?或者您将相机旋转了 90°,仍然有 1600x1200 像素的图像?
  • 我的意思是我将相机旋转了 90°,因此图像为 1200x1600px(宽 x 高)。

标签: c++ opencv camera-calibration distortion remap


【解决方案1】:

问题在于 rectifymaps 的计算:

    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 x 1600。现在不管图片是否旋转(1200x1600)都不会裁剪。现在我很满意,当然这不是最好的解决方案。

【讨论】:

    猜你喜欢
    • 2012-11-18
    • 2014-07-13
    • 2012-12-31
    • 1970-01-01
    • 2017-08-04
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多