如何使用opencv在没有像素丢失的情况下对图像进行去噪

问题描述 投票:0回答:1

众所周知,我们可以使用alpha = 1的函数cv::getOptimalNewCameraMatrix()来获得一个新的CameraMatrix。然后我们使用功能cv::undistort()与新的CameraMatrix可以在dedistortion后获取图像。然而,我发现失真后的图像与原始图像一样大,而失真后的图像的某些部分被黑色覆盖。所以我的问题是:这是否意味着原始图像像素丢失了?并且有没有办法避免像素丢失或使用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,因为它的某些部分是没有意义的。谢谢!

c++ opencv pixel camera-calibration
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.