2

これを yahoo の opencv グループに投稿しましたが、うまくいきませんでした。

チェッカーボードを使用せずに、3D キャリブレーション リグで撮影した 1 つの写真からの一連の画像/オブジェクト ポイントがあります。Bouguet カメラ キャリブレーション ツールボックスを使用して Matlab のデータを使用しましたが、うまくいきました。私は 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 カメラ キャリブレーションの答えです

4

1 に答える 1

0

ドキュメントによると、img_points と obj_points のベクトルのベクトルを渡す必要があります。ここでは、それぞれの場合に点のベクトルのみを渡します。これにより、ni >= 0 が説明される場合があります。おそらく、キャリブレーション関数への呼び出しを言い換える必要があります。

于 2012-05-02T20:32:01.847 に答える