I have posted this to the opencv group on yahoo, with no luck.
I have a set of image / object points from one picture taken of a 3D calibration rig, NOT using checkerboards. I've used the data in Matlab with the Bouguet camera calibration toolbox, and it works! I'm trying to get away from Matlab (maybe I shouldn't be).
My code is below, I keep getting this error "\OpenCV-2.3.1\modules\calib3d\src\calibration.cpp:3161: error: (-215) ni >= 0 "
I've been trying to use the opencv 2.3.1 python wrappers. Also, the initial camera matrix I define is very close to the calculated values from the Matlab toolbox. I have a feeling it's going to be easier to translate the Matlab code to python than to get this to work, but I'm hoping someone can prove that wrong. Thanks in advance for any help. John
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)
This link is the answer OpenCV 2.3 camera calibration