2012-03-12 18 views
2

私はこれを運のないyahooのopencvグループに掲載しました。非平面リグのOpenCVカメラ較正

チェッカーボードを使用せずに、3Dキャリブレーションリグから撮影した1枚の画像の画像/オブジェクトポイントがあります。私は、Bouguetカメラ校正ツールボックスでMatlabのデータを使用しました。私はMatlabから離れようとしています(多分私はそうすべきではありません)。

私のコードは以下の通りです、私は ":3161:エラー:\ OpenCVの-2.3.1 \モジュール\ calib3d \ SRC \ calibration.cpp(-215)NI> = 0" このエラーを取得しておく

I 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

答えて

0

である、あなたはimg_pointsとobj_pointsのためのベクトルのベクトルを渡す必要があります。ここでは、それぞれの点のベクトルだけを渡します。これはni> = 0を説明するかもしれません。おそらく、あなたは校正関数への呼び出しを言い換える必要があります。

+0

それはまさに問題だった "ベクトルのベクトル"が私を得た – hokiebird

関連する問題