如何使用opencv在不丢失像素的情况下对图像进行去扭曲

How to dedistort an image without pixel loss using opencv

本文关键字:图像 情况下 opencv 何使用 像素      更新时间:2023-10-16
众所周知

,我们可以使用 alpha = 1 的函数cv::getOptimalNewCameraMatrix()来获取新的 CameraMatrix。然后我们使用函数cv::undistort()与新的CameraMatrix一起可以得到去失真的图像。但是,我发现失真后的图像与原始图像一样大,失真后的图像的某些部分被黑色覆盖。所以我的问题是:D这意味着原始图像像素丢失了吗?有没有办法避免像素丢失或使用OpenCV获得大于原始图像的图像?

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

图像和show_image的大小都是640 * 480,但是从我的角度来看,失真后的图像大小应该大于640 * 480,因为它的某些部分是没有意义的。谢谢!

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

相关文章: