2012-04-13 8 views
1

すべて、 OpenCVを使用してカメラをキャリブレーションするPythonスクリプトがあります。これは今stackoverflowヘルプの多くの助けを借りて動作します。しかし、私は歪み定数に問題があります。私は定数の数を制御するように見えることはできません。私は、4つのdistoriton定数ではなく、5を求めます。ドキュメントでは、「ベクトルに4つの要素が含まれている場合、それはK3 = 0を意味します。だから私はdist_const = np.zeros(4)を開始し、それをcv2.calibrateCameraに渡しますが、返されたdist_constには5つの定数が返されます。私はCV_CALIB_FIX_K3というフラグも試しましたが、 'itigerはasignedでなければなりません'というエラーが出ます。誰もが前にこの行動を見て、どんな助けも大いに評価されるだろう。私の他の質問へOpenCVカメラキャリブレーション、歪み定数を制御できない

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 

リンクは、私のpython/OpenCVのと交換しようとしているカリフォルニア工科大学のMATLABコードから、dist_coefsの結果を持っています。

john

答えて

2
にごcalibrateCamera呼び出しを変更し

:あなたはあなたの例で行ったようにあなたがCV2と品種の名前空間を混合、私にしたくない

retval,camera_matrix,dist_coefs,rvecs,tvecs = cv2.calibrateCamera([obj_points],[img_points],size,camera_matrix,dist_coefs,flags=cv2.CALIB_USE_INTRINSIC_GUESS + cv2.CALIB_FIX_K3) 

+0

それはチケットだった!ありがとう – hokiebird

0

私はあなたが何を意味するかを見ます。たぶん、校正のために1つの画像しか使用していないからです。

+1

それはこの1つには良い答えがないようです。私はyahooのopencvのリストに同じ質問を投稿した。これがCV研究の大部分がMatlabで行われている理由です。すでにMatlabで動作しているものを複製するには、かなりの労力がかかります。 – hokiebird

0

私は同じ問題を抱えていたし、私が見つけた解決策は:

import cv2 
from cv2 import cv 


... flags = cv2.cv.CALIB_USE_INTRINSIC_GUESS + ... 
関連する問題