OpenCV相机标定图像裁剪(ROI子矩阵)的方法

3
我在使用OpenCV的畸变校正函数时遇到了些问题。我正在使用一个带有广角镜头的相机来工作。由于它已经安装好了,所以我的接触有些困难。问题基本上可以归结为以下几点:
我已经成功地测量了所有镜头参数,并且可以毫无问题地对整张图像进行去畸变处理。但实际上我正在进行一种线扫描模式的工作。我们只使用传感器中间的一块,大约100个像素高。下面是用于说明的图片:
现在,如果我将undistort应用于所讨论图像的ROI(感兴趣区域),它自然会认为这是完整图像顶部的一个剪切,因此纠正值与完整图像高度的一半处的纠正值相差很大。
我理解如果我只是在使用低分辨率的全面框架,我如何修改摄像机矩阵来补偿图像比例,但问题是:我是否可以以任何方式补偿裁剪出来的部分移位以实现正确的转换?
我想我可以使用具有全帧分辨率的黑色图像,并将相关数据复制到其中间,但这是不可能的,因为这种处理速度太慢了。
谢谢您的任何见解!
问候, Jan。

你尝试过调整主点(cx,cy)吗? - Vaughn Cato
如果我说服undistort认为镜头的中心在全画幅图像的顶部,这会有帮助吗?我会尝试的...谢谢。 - Jan Blažíček
如果你裁剪了图像,那么主点的坐标就会发生变化。例如,如果你原来的主点坐标是(30,40),并且你在四周裁剪了10个像素,那么你的新主点将会在(20,30)处,因为裁剪后图像中的像素(20,30)与原始图像中的像素(30,40)相同。 - Vaughn Cato
没错,就是这样。非常感谢。你能把它发布为答案吗?这样我就可以接受了。 - Jan Blažíček
1个回答

3
如果你裁剪图像,那么主点的坐标将会改变。例如,如果您原来的主点在(30,40),并且您在四周裁剪了10个像素,则您的新主点将在(20,30),因为裁剪后的图像中的像素(20,30)与原始图像中的像素(30,40)相同。
您需要相应地调整相机矩阵中的cx和cy值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接