Python OpenCV calibrateCamera:objectPoints应该包含类型为Point3f的点的向



我想根据一些编码标记的图片坐标和对象坐标来计算相机校准参数。

ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(points, centers, gray.shape[::-1], None, None)

但我得到以下错误:

objectPoints should contain vector of vectors of points of type Point3f in function 'cv::collectCalibrationData'

这让我很困惑,因为对象点是这样实现的:

points=np.float32([[7.8, 4.9, 0], [5.2, 4.9, 0], [7.8, 7.35, 0], [5.2, 7.35, 0], [2.6, 7.35, 0],[10.4, 0, 0],...])

根据控制台打印和np.shape 的尺寸,它们似乎是mx3矩阵

[[ 7.8   4.9   0.  ]
[ 5.2   4.9   0.  ]
[ 7.8   7.35  0.  ]
[ 5.2   7.35  0.  ]
[ 2.6   7.35  0.  ]
[10.4   0.    0.  ]
...]
(20, 3)

我的图像点是根据一些Aruco标记计算的,看起来像这样:

[[2639.   1826.5 ]
[2265.5  1820.5 ]
[2638.75 1480.  ]
[2269.   1475.25]
[1898.   1470.5 ]
[3024.   2551.25]
...]
(20, 2)

我知道共面的物点并不真正适合这个任务。我刚刚开始创建一些伪数据来了解所有内容的语法:(提前感谢

答案很简单:

objpoints=[]
objpoints.append(points)

然后调用cv2.calibrateCamera,使用objpoints而不是点

好吧,我的理智消失了:(

最新更新