所有人, 我有一个python脚本,它使用OpenCV来校准相机。它现在在stackoverflow帮助下工作。但是,我对畸变常数有问题。我似乎无法控制拟合常数的数目。我只需要4个离散常数,而不是5个。在文档中,它声明“也就是说,如果向量包含四个元素,就意味着K3=0”,这就是我想要的。所以我启动dist_const=np.零(4) ,将其传递给cv2.calibrateCamera,但返回的dist_const返回了5个常量。我也尝试了CV_CALIB_FIX_K3标志,但一直收到“必须是一个iteger”错误。如果有人以前见过这种行为,任何帮助都将不胜感激。在
import cv2
from cv2 import cv
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,'float32')
img_points = np.array(img_points,'float32')
w = 1680
h = 1050
size = (w,h)
camera_matrix = np.zeros((3,3),'float32')
camera_matrix[0,0]= 2200.0
camera_matrix[1,1]= 2200.0
camera_matrix[2,2]=1.0
camera_matrix[0,2]=750.0
camera_matrix[1,2]=750.0
dist_coefs = np.zeros(4,'float32')
retval,camera_matrix,dist_coefs,rvecs,tvecs = cv2.calibrateCamera([obj_points],[img_points],size,camera_matrix,dist_coefs,flags=cv.CV_CALIB_USE_INTRINSIC_GUESS)
print camera_matrix
print dist_coefs
链接到我的另一个问题,有dist_coefs的结果,来自我试图用python/opencv替换的加州理工学院matlab代码。在
约翰
将calibrateCamera调用更改为:
你不希望我像你在例子中那样混合cv2和cv名称空间。在
我明白你的意思了。也许是因为你只用一张图像来校准。在
我遇到了同样的问题,我找到的解决办法是:
相关问题 更多 >
编程相关推荐