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