2012-04-13 104 views
1

所有, 我有一個使用了OpenCV來校準相機python腳本。它現在可以從stackoverflow幫助中得到很多幫助。但是,我遇到了畸變常數問題。我似乎無法控制適合的常量數量。我想只有4 distoriton常量,而不是5.在它規定的文檔「也就是說,如果向量包含四個要素,這意味着K3 = 0」,這是我想要的。於是,我開始dist_const = np.zeros(4),它傳遞給cv2.calibrateCamera,但返回dist_const已經回到5個常量。我也試着旗CV_CALIB_FIX_K3,但要得到一個「的iteger必須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 

鏈接到我的其他問題,有dist_coefs結果,來自加州理工學院的MATLAB代碼我想使用Python/OpenCV的更換。

john

回答

2

您calibrateCamera電話更改爲:

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) 

你不想給我混合CV2和CV命名空間就像你在你的例子一樣。

+0

那是票!謝謝 – hokiebird 2012-05-02 19:56:31

0

我明白你的意思了。也許是因爲您只使用單個圖像進行校準。

+1

似乎還有這一個沒有很好的答案。我在雅虎的opencv列表上發佈了同樣的問題,沒有采訪者。這就是爲什麼大多數CV研究都是用Matlab完成的。它需要花費很多精力來複制我已經在Matlab中運行的東西。 – hokiebird 2012-04-18 07:24:59

0

我有同樣的問題,我找到了解決辦法是:

import cv2 
from cv2 import cv 


... flags = cv2.cv.CALIB_USE_INTRINSIC_GUESS + ...