2013-12-15 214 views
3

下面的圖片被傳遞給cv.findChessboardCorners,由於我無法理解的原因,它只是沒有給我角落的位置。棋盤很明顯,白線的厚度也很突出。cv.findChessboardCorners爲什麼不能爲我工作?

你知道爲什麼這不起作用嗎?

圖像尺寸爲960X1280,網格尺寸爲[15,11],即每行15個內角和每列11個內角。

輸出總是一個空矩陣。我試着改變參數和函數使用直方圖均衡,所以我假設像素分佈不會是一個問題。

Checkerboard image projected on a Wall

+0

只是注意,您預計棋盤有看起來已經扭曲 – berak

+0

我不覺得,說實話,我認爲這將是一個相當簡單的情況下,該算法去努力,但我猜門是問題。直方圖調整做到了! –

回答

2

我希望你不介意在Python的答案,而不是MATLAB的。 (它們使用相同的OpenCV庫,我希望指令的對應關係是明確的。)

您的圖片不變,工作正常,我用下面這發現的角落,並在窗口顏色的點顯示它們的代碼:

#!/usr/bin/python 
import cv2.cv as cv 
import sys 

filename = sys.argv[1] 
im = cv.LoadImage(filename, cv.CV_LOAD_IMAGE_GRAYSCALE) 
im3 = cv.LoadImage(filename, cv.CV_LOAD_IMAGE_COLOR) 
chessboard_dim = (15, 11) 
found_all, corners = cv.FindChessboardCorners(im, chessboard_dim) 
cv.DrawChessboardCorners(im3, chessboard_dim, corners, found_all) 
cv.ShowImage("Chessboard with corners", im3) 
cv.WaitKey() 

輸出圖像(略裁剪)看起來像:

Checkerboard with corners highlighted

+0

男人!爲什麼這不適用於MATlab?!?無論如何,最後我調整了直方圖來增加對比度,然後它運行得很好,但爲什麼沒有進行調整,它爲我工作? –

+0

@RakshitKothari如果它有什麼區別,我使用的是OpenCV版本2.3.1(Debian Wheezy)。 – John1024

+0

嗯!我明白了,儘管它仍然不適合我。其中一個答案提出了將門區域裁剪出來,看起來效果很好。我猜想黑暗的大門讓打火機牆迷惑了算法。 –

2

我使用mexopencv(針對最新的OpenCV 2.4.7編譯)試圖在MATLAB,和我有同樣的問題沒有發現角落。

當然,這個問題很容易通過裁剪圖像來解決,以便更多地關注電路板。您必須對所有圖像序列應用一致的處理,並確保其中包含所有的圖像。

% read grayscale image 
img = imread('http://i.stack.imgur.com/5VsOP.jpg'); 

% crop image to the area of the chessboard 
img2 = img(100:600, 200:1000); 

% detect corners 
c = cv.findChessboardCorners(img2, [15,11]); 
if isempty(c), error('no corners found'); end 

% show result 
out = cv.drawChessboardCorners(repmat(img2,[1 1 3]), [15,11], c); 
imshow(out) 

corners_detected

+2

你可能想添加'c = cv。cornerSubPix(img2,c);'在檢測之後使用亞像素精度來優化角位置。 – Amro

+0

謝謝!這意味着左邊的門混淆了算法。我想知道爲什麼?經過直方圖調整後,它對我來說工作得很好。 –

2

如果您有計算機視覺系統工具箱,你可以使用detectCheckerboardPoints功能。它在沒有任何預處理的情況下工作,併爲您提供亞像素精度。 detected checkerboard

+1

我看到了,給自己說明一下:get 2013b! –

+0

在這種情況下,您應該查看2013年的相機校準器應用程序。 http://www.mathworks.com/help/vision/ug/find-camera-parameters-with-the-camera-calibrator.html – Dima