2012-10-07 7 views
5

私はopenCVとpythonを使って3Dとステレオカメラのキャリブレーションを行う方法を学ぼうとしています。 8x6チェス盤(7x5の内部コーナー)の3つのカメラビューを使用して、私はcv.calibrateCamera()を正常に動作させることができましたが、私はcv2を使用すると完全に固執します。 手順の1つは、チェス盤のコーナーを見つけることです。 cv.findChessboardCorners()はコーナーをポイントのリストとして返しますが、cv2はnumpy配列を使用し、ポイントを(35,1,2)のnumpy配列として返します。 cv2.calibrateCamera()のパラメータはobject_points,image_pointsおよびimage_sizeです。私は(3,35,3)のnumpy配列のオブジェクトポイントを供給しており、画像ポイントは(3,35,2) numpyの配列になっています。画像サイズは(1632, 1224)です。誰が問題が何であるか教えていただけますか?私が手にエラーが非常に便利ではありません。cv2.cameraCalibration using python

Traceback (most recent call last): 
    File "H:/pyCV/locv_book/ch11/calCamera2a.py", line 46, in <module> 
    cv2.calibrateCamera(opts,ipts,size) 
error: ..\..\..\src\opencv\modules\calib3d\src\calibration.cpp:3173: error: (-215) ni >= 0 

答えて

5

ポイントは、(N、2)及び(N、3)行列形式で、FLOAT32する必要があります。この方法でfloat32に変換することができます:

points32 = np.array(points,dtype=np.float32) 
+0

ありがとうございます!このエラーは終わりに私を悩ませました! – shinjin

+1

OpenCV 2.4.10を使用して2015年にこの質問が見つかりました。私は同様の "cv2.error:... calibration.cpp:3169:error:(-215)ni> = 0を関数cv :: collectCalibrationData"で取得します。回避策は、オブジェクトとイメージポイントの両方の配列をそれぞれ(1、N、3)と(1、N、2)に整形することでした。 – sastanin