C++ Opencv 不同分辨率相机标定

Men*_*eng 4 c++ camera opencv matrix

我的相机有不同的分辨率 1280*480 640*240 320*120

我使用Opencv3的算法来校准分辨率为1280*480的相机,并得到了该分辨率的相机矩阵(fx fy cx cy)和畸变矩阵(k1 k2 p1 p2 k3)。

但现在我想用这些相机矩阵和畸变矩阵来校准分辨率为320*120的相机。我不知道如何将分辨率1280*480的这两个矩阵应用到320*120的分辨率。PS我没有直接标定320*120分辨率的相机,因为图像太小,Opencv的算法找不到棋盘。

我想知道如果我将分辨率 1280*480 更改为 320*120,相机矩阵 (fx fy cx cy) 和畸变矩阵 (k1 k2 p1 p2 k3) 将如何变化。

opencv的算法如下: http://docs.opencv.org/3.0-beta/doc/tutorials/calib3d/camera_calibration/camera_calibration.html

KjM*_*Mag 6

您不需要更改失真矩阵。至于相机矩阵(包含 的矩阵fx, fy, cx, cy),根据您的情况,您只需将它们除以 4 即可。一般公式为:

fx' = (dimx' / dimx) * fx 
fy' = (dimy' / dimy) * fy
Run Code Online (Sandbox Code Playgroud)

fx'是新分辨率的值,fx是原始分辨率已有的值,dimx'是沿 x 轴的新分辨率,dimx是原始分辨率。这同样适用于fy.

cxcy的计算方式类似,因为所有这些值都以像素坐标表示。

根据有关相机矩阵的OpenCV 文档:

如果来自相机的图像按一个因子缩放,则所有这些参数都应按相同的因子缩放(分别乘/除)。