2017-03-09 610 views
0

私のpythonコードで画像上にチェスボードが見つかりません。 私は、このタスクを解決するために、このコードを使用します。opencv findChessboardCornersに失敗しました

First test image Second test image

そして、私はsucsesfully findCirclesGridを使用します。

import numpy as np 
import cv2 
import glob 

# 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), (2,0,0) ....,(6,5,0) 
a = 7 
b = 6 
objp = np.zeros((b*a,3), np.float32) 
objp[:,:2] = np.mgrid[0:a,0:b].T.reshape(-1,2) 

# Arrays to store object points and image points from all the images. 
objpoints = [] # 3d point in real world space 
imgpoints = [] # 2d points in image plane. 

images = glob.glob('*.jpg') 

for fname in images: 
    img = cv2.imread(fname) 
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 

    # Find the chess board corners 
    ret, corners = cv2.findChessboardCorners(gray, (a,b), None) 
    print(fname, ret) 

    # 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 the corners 
    cv2.drawChessboardCorners(img, (a,b), corners, ret) 
    cv2.imshow('img',img) 
    cv2.waitKey(-1) 

cv2.destroyAllWindows() 

私は、このテスト画像を使用します。私が間違っていることは何ですか? 私は、そのようなイメージを使用してfindChessboardCornersが再度失敗したthis post

UPDATE 1

のように私の画像をシャープにしてみてください。私はハリスコーナー検出器を使用する場合 Another test 1 Another test 2

それは多くのエラーを返し、カメラキャリブレーションにハリスの結果を使用することは困難です。

+0

この件があります[データを失うことなくOpenCV Birdseyeビュー](http://stackoverflow.com/a/39316776/2521214)少し助けてくれる – Spektre

答えて

2

これは7x6ボードではなく、9x6ボードです。 a = 9に変更します。境界線は重要ではありません。

+0

私はそれを試して、それは完全に動作します。 'a = 9'を割り当てる特別な理由は? –

+0

ありがとう!完璧に動作します! –

1

UPDATE:

弘樹で述べたように、私はa = 9を交換し、それが完全に働きました。

画像1:

enter image description here

画像2:

enter image description here

画像3:

enter image description here

cv2.findChessboardCornersを使用している間チェス盤を含む画像には枠線が必要です。あなたから提供された画像には境界線が存在しないため、関数は失敗します。チェス盤の周りに黒い境界線を描き、それを実行することを検討してください。

もっと簡単な方法がある一方....

与えられたとして、あなたはこれは私が結果として得られるものですTHIS PAGE

ハリスコーナー検出を使用してみましたができます

enter image description here

+0

ありがとう!私は自分の投稿を更新する。 –

+0

ありがとうございました!それは仕事です! –

+1

「a = 9」の変更理由はまだ分かりません。理由を見つけた場合は、D –

関連する問題