首页 > 解决方案 > OpenCV:getOptimalNewCameraMatrix() - newImgSize 参数?

问题描述

这个参数的目的是什么?它如何影响输出以及何时可能想要使用它?

https://docs.opencv.org/master/d9/d0c/group__calib3d.html#ga7a6c4e032c97f03ba747966e6ad862b1 (搜索getOptimalNewCameraMatrix()

标签: pythonopencv

解决方案


考虑非线性镜头失真主要是桶形的(典型)情况。这意味着,例如,图像左上角附近的像素对应于远离焦轴的光线,而不是没有失真时的光线:就好像靠近图像边缘的相机有更大的视野,并且像素离图像中心(嗯,主要点)越远,这种效果就越明显。在图像的角落处实际上有更多的视野,而在图像两侧的中心处则更少。当您使用校准参数扭曲图像以消除失真时,您需要决定如何处理这个“额外”图像区域。您的选择是:

  • 你可以留着。这意味着扭曲的图像必须具有比原始图像更大的区域,以便在边缘附近显示“额外”的视野。但是因为角落的光线比靠近侧面中心的光线更多,所以你必须用黑色填充缺失的像素。结果是具有“蝴蝶”形状的扭曲图像。
  • 你可以把它扔掉,在扭曲的图像中只保留一个矩形,其像素都是有效的(即它们对应于原始图像中的一个像素)。实际上,您正在修剪蝴蝶小翼。
  • 你可以保留一些并扔掉一些。

OpenCv 中的该函数允许您做出选择(通过其“alpha”参数),并返回对应于您选择的扭曲图像的针孔相机矩阵。


推荐阅读