python - OpenCV:getOptimalNewCameraMatrix() - newImgSize 参数?
问题描述
这个参数的目的是什么?它如何影响输出以及何时可能想要使用它?
https://docs.opencv.org/master/d9/d0c/group__calib3d.html#ga7a6c4e032c97f03ba747966e6ad862b1
(搜索getOptimalNewCameraMatrix()
)
解决方案
考虑非线性镜头失真主要是桶形的(典型)情况。这意味着,例如,图像左上角附近的像素对应于远离焦轴的光线,而不是没有失真时的光线:就好像靠近图像边缘的相机有更大的视野,并且像素离图像中心(嗯,主要点)越远,这种效果就越明显。在图像的角落处实际上有更多的视野,而在图像两侧的中心处则更少。当您使用校准参数扭曲图像以消除失真时,您需要决定如何处理这个“额外”图像区域。您的选择是:
- 你可以留着。这意味着扭曲的图像必须具有比原始图像更大的区域,以便在边缘附近显示“额外”的视野。但是因为角落的光线比靠近侧面中心的光线更多,所以你必须用黑色填充缺失的像素。结果是具有“蝴蝶”形状的扭曲图像。
- 你可以把它扔掉,在扭曲的图像中只保留一个矩形,其像素都是有效的(即它们对应于原始图像中的一个像素)。实际上,您正在修剪蝴蝶小翼。
- 你可以保留一些并扔掉一些。
OpenCv 中的该函数允许您做出选择(通过其“alpha”参数),并返回对应于您选择的扭曲图像的针孔相机矩阵。
推荐阅读
- python - Azure Functions Python 状态:500 内部服务器错误
- php - 如何在 Mac OS X Catalina 中的 PHP 上加载 memcached?
- excel - 检测双打的公式,并选择具有最高 POP 数的公式
- c++ - 虚幻引擎 4 (ue4) 中带有自定义 c++ 蓝图函数库的蓝图循环/for/while 节点
- scala - 这是scala中的什么类型的表达?
- css - 输入字段,移动正在输入的文本
- c# - 中间件中断 web api 调用
- java - 如何将我的自定义数据类设为 StatefulRedisConnection 值类型?
- ios - 如何自动缩放mapView以显示覆盖
- sql - 在一个表中创建依赖于另一个表中的数据的条目