python - 非平面钻机的 OpenCV 相机标定

标签 python opencv camera-calibration

我已经将它发布到 yahoo 上的 opencv 组,但没有成功。

我有一组图像/对象点来自 3D 校准装置拍摄的一张照片,而不是使用棋盘格。我已经将 Matlab 中的数据与 Bouguet 相机校准工具箱一起使用,并且有效!我正在努力摆脱 Matlab(也许我不应该这样做)。

我的代码如下,我一直收到这个错误“\OpenCV-2.3.1\modules\calib3d\src\calibration.cpp:3161: error: (-215) ni >= 0 "

我一直在尝试使用 opencv 2.3.1 python 包装器。此外,我定义的初始相机矩阵非常接近 Matlab 工具箱中的计算值。我有一种感觉,将 Matlab 代码翻译成 python 比让它工作更容易,但我希望有人能证明这是错误的。在此先感谢您的帮助。约翰

import cv2
import numpy as np

obj_points = [[-9.7,3.0,4.5],[-11.1,0.5,3.1],[-8.5,0.9,2.4],[-5.8,4.4,2.7],    [-4.8,1.5,0.2],[-6.7,-1.6,-0.4],[-8.7,-3.3,-0.6],[-4.3,-1.2,-2.4],[-12.4,-2.3,0.9],    [-14.1,-3.8,-0.6],[-18.9,2.9,2.9],[-14.6,2.3,4.6],[-16.0,0.8,3.0],[-18.9,-0.1,0.3],    [-16.3,-1.7,0.5],[-18.6,-2.7,-2.2]]
img_points = [[993.0,623.0],[942.0,705.0],[1023.0,720.0],[1116.0,645.0],[1136.0,764.0],[1071.0,847.0],[1003.0,885.0],[1142.0,887.0],[886.0,816.0],[827.0,883.0],[710.0,636.0],[837.0,621.0],[789.0,688.0],[699.0,759.0],[768.0,800.0],[697.0,873.0]]

obj_points = np.array(obj_points)
img_points = np.array(img_points)

w = 1680
h = 1050
size = (w,h)

camera_matrix = np.zeros((3, 3))
camera_matrix[0,0]= 2200.0
camera_matrix[1,1]= 2200.0
camera_matrix[2,2]=1.0
camera_matrix[2,0]=750.0
camera_matrix[2,1]=750.0

dist_coefs = np.zeros(4)
results = cv2.calibrateCamera(obj_points, img_points,size, camera_matrix, dist_coefs)

这个链接就是答案OpenCV 2.3 camera calibration

最佳答案

根据文档,您必须为 img_points 和 obj_points 传递一个向量向量。在这里,您在每种情况下仅传递一个点向量。这可能解释了 ni >= 0。您可能需要改写对校准函数的调用。

关于python - 非平面钻机的 OpenCV 相机标定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9661943/

相关文章:

opencv不失真图像有一个奇怪的圆圈

python - 使用 RE 扫描仪查找双引号中的 Material ?

python - 过滤极坐标数据框中的行,其中行列表

opencv - CMake和OpenCV 2.3的麻烦

opencv - OpenCV DescriptorMatcher 中匹配的阈值

python - StereoRectifyUncalibrated不接受与FindFundamentalMat相同的数组

c++ - 在 OpenCV 中使用旋转和平移矩阵

python - 如何在 Keras 训练过程中保存动力?

python - TensorFlow 未编译为使用 SSE(等)指令,但这些指令可用

OpenCV:Ubuntu:NetBeans:cvSubdiv2DEdgeOrg "undeclared"