OpenCV 不扭曲裁剪后的图像

OpenCV Undistort Cropped Image

我有一张 1280px x 960px 的图片,已知
相机矩阵:
[ , 0 , , 0 , , , 0 , 0 , 1]
失真矩阵:
[1, 2, 1, 2, 3]

我正在尝试通过

消除它的失真
undistort(croppedImage, undistortedImage, cameraMatrix, distortionMatrix);

但是时间太长,所以我裁剪了边界为 x1、x2、y1、y2 的图像。

如果我将相同的相机矩阵和失真矩阵应用到 undistort() 中,图像不会变得完全不失真。

如何在不重新校准的情况下根据原始相机矩阵和畸变矩阵对新裁剪的图像进行去畸变?

不失真效果应用于相机矩阵中的 cx 和 cy 位置。

如果裁剪图像,您需要做的就是将 cx 和 cy 位置移动到原始图像上的位置。这样,将从该位置应用不失真,并且您的裁剪部分将相应地不失真。

所有其他值可以保持不变

new_fx = fx
new_fy = fy
new_cx = cx - x1
new_cy = cy - y1

new_k1 = k1
new_k2 = k2
new_p1 = p1
new_p2 = p2
new_k3 = k3