2016-05-18 4 views
0

OpenCV/Pythonの例(OpenCV Tutorials)をガイドブックとして使用して、カメラの較正プログラムを作成しています。OpenCVによるカメラキャリブレーション - チェス盤の正方形サイズを調整する方法は?

質問:特定のチェス盤パターンの正方形のサイズを考慮してこのサンプルコードを調整するにはどうすればよいですか?カメラのキャリブレーションプロセスについての私の理解は、この情報が何らかの方法で使用されなければならないということです。

cv2.calibrateCamera() 

は間違っています。

ここでは、イメージファイルを読み込んで校正プロセスを実行して、カメラ行列やその他の値を生成するコードの一部です。

#import cv2 
#import numpy as np 
#import glob 

""" 
Corner Finding 
""" 
# termination criteria 
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) 

# Prepare object points, like (0,0,0), (1,0,0), ....,(6,5,0) 
objp = np.zeros((5*5,3), np.float32) 
objp[:,:2] = np.mgrid[0:5,0:5].T.reshape(-1,2) 

# Arrays to store object points and image points from all images 
objpoints = [] 
imgpoints = [] 

counting = 0 

# Import Images 
images = glob.glob('dir/sub dir/Images/*') 

for fname in images: 

    img = cv2.imread(fname)  # Read images 
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Convert to grayscale 



    # Find the chess board corners 
    ret, corners = cv2.findChessboardCorners(gray, (5,5), None) 

    # if found, add object points, image points (after refining them) 
    if ret == True: 
     objpoints.append(objp) 

     cv2.cornerSubPix(gray, corners, (11,11), (-1,-1), criteria) 
     imgpoints.append(corners) 

     #Draw and display corners 
     cv2.drawChessboardCorners(img, (5,5), corners, ret) 
     counting += 1 

     print str(counting) + ' Viable Image(s)' 

     cv2.imshow('img', img) 
     cv2.waitKey(500) 

cv2.destroyAllWindows()   


# Calibrate Camera  
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)  
+0

objpointsは3Dスペース内のチェス盤ポイントです。おそらくそれらは(0,0);(0,1);(1,1);(1,0); (2,0);他の正方形のサイズを得るためにこれらのポイント位置をリサイズするだけです。 – Micka

+0

@Mickaしたがって、私のチェス盤に平均25.3mmの正方形がある場合、それらの値は(0,0 );(0,0.0253):....? –

+0

。 3D座標(およびカメラ組み込み関数)の単位を '[mm]'にする場合は、 '(0、25.3)'を使用します。 – Micka

答えて

0

ここで、正方形のサイズを30mmとした場合、この値にobjp[:,:2]を掛けます。 objp[:,:2]としてこの

objp[:,:2] = np.mgrid[0:9,0:6].T.reshape(-1,2)*30 # 30 mm size of square 

ように(0,0)、(0,1)、(0,2)...(8,5)として与えられるcheckboard隅の点の集合です。 (0,0)ポイントは左上の最も大きい四角のコーナーであり、(8,5)は右の最も低い四角のコーナーです。この場合、これらの点には単位はありませんが、これらの値に正方形のサイズ(たとえば30 mm)を掛けると(0,0)、(0,30)、.....(240,150)になります実世界の単位です。この場合、翻訳ベクトルはmm unitsになります。

+0

ポイント(0,0)..(8,5)は(行、列)または(x、y)の形式ですか?私は彼らがフォーム(行、列)のものだと思っていますが、わかりません –

関連する問題