【问题标题】:How to dedistort an image without pixel loss using opencv如何使用opencv在不丢失像素的情况下对图像进行去失真
【发布时间】:2019-09-17 04:11:13
【问题描述】:

众所周知,我们可以使用函数cv::getOptimalNewCameraMatrix() alpha = 1 来获得一个新的CameraMatrix。然后我们使用函数cv::undistort()和新的CameraMatrix可以得到去失真后的图像。但是,我发现失真后的图像与原始图像一样大,并且失真后的图像的某些部分被黑色覆盖。 所以我的问题是:这是否意味着原始图像像素丢失了?有什么方法可以避免像素丢失或使用opencv获取尺寸大于原始图像的图像?

cv::Mat NewKMatrixLeft = cv::getOptimalNewCameraMatrix(KMatrixLeft,DistMatrixLeft           ,cv::Size(image.cols,image.rows),1);

cv::undistort(image, show_image, KMatrixLeft, DistMatrixLeft,NewKMatrixLeft);

image和show_image的尺寸都是640*480,但是在我看来,变形后的图片尺寸应该大于640*480,因为有些部分是没有意义的。 谢谢!

【问题讨论】:

    标签: c++ opencv pixel camera-calibration


    【解决方案1】:

    为了纠正失真,您基本上必须扭转导致初始失真的过程。这意味着像素沿各个方向被拉伸和挤压以校正失真。在某些情况下,这会使像素远离图像边缘。在 OpenCV 中,这是通过插入黑色像素来处理的。这种方法没有任何问题。然后,您可以选择如何裁剪它以去除边缘的黑色像素。

    【讨论】:

      猜你喜欢
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多