我使用python calibrate.py脚本(这是opencv示例的一部分)来研究opencv相机校准算法。
我在脚本中只进行了一些小的修改,即未失真的图像始终以与输入图像相同的图片大小存储。
如果我使用opencv提供的图片之一作为输入图像,结果是预期的。未预失真的图像按预期生成。
但如果我使用自己的照片,我会得到以下结果:
抱歉,由于声誉很少,无法上传我的输入图片(图片尺寸相同): - (
Picture with detected corners Undistorted Picture 输出如下:
RMS: 0.121159225738
camera matrix:
[[ 163.23957898 0. 322.26349617]
[ 0. 216.31952935 234.94645994]
[ 0. 0. 1. ]]
distortion coefficients: [-0.08196739 0.03332906 0.01195436 0.00803256 -0.02955244]
x: (0, 0, 0, 0)
y 0
w 0
h 0
我已经在这个论坛上看过,在这种情况下应该覆盖失真系数,但我不明白为什么? 并且我已经通过操作这样的值进行了一些测试,但我找不到使用输入图像的所有像素和黑色部分显示未失真图像的设置。
所有提示都非常感谢!!
THANX !!
答案 0 :(得分:0)
在你的相机矩阵中,让fx(163.2395)和fy(216.3195)非常不同是很奇怪的。通常它们应该非常接近,只要你使用方形像素传感器,99%的情况下使用数码相机。
在你的照片中,网格看起来并不像正方形。请确保您的棋盘打印具有方形网格,因为这是opencv校准的要求。