下面的圖片被傳遞給cv.findChessboardCorners,由於我無法理解的原因,它只是沒有給我角落的位置。棋盤很明顯,白線的厚度也很突出。cv.findChessboardCorners爲什麼不能爲我工作?
你知道爲什麼這不起作用嗎?
圖像尺寸爲960X1280,網格尺寸爲[15,11],即每行15個內角和每列11個內角。
輸出總是一個空矩陣。我試着改變參數和函數使用直方圖均衡,所以我假設像素分佈不會是一個問題。
下面的圖片被傳遞給cv.findChessboardCorners,由於我無法理解的原因,它只是沒有給我角落的位置。棋盤很明顯,白線的厚度也很突出。cv.findChessboardCorners爲什麼不能爲我工作?
你知道爲什麼這不起作用嗎?
圖像尺寸爲960X1280,網格尺寸爲[15,11],即每行15個內角和每列11個內角。
輸出總是一個空矩陣。我試着改變參數和函數使用直方圖均衡,所以我假設像素分佈不會是一個問題。
我希望你不介意在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()
輸出圖像(略裁剪)看起來像:
男人!爲什麼這不適用於MATlab?!?無論如何,最後我調整了直方圖來增加對比度,然後它運行得很好,但爲什麼沒有進行調整,它爲我工作? –
@RakshitKothari如果它有什麼區別,我使用的是OpenCV版本2.3.1(Debian Wheezy)。 – John1024
嗯!我明白了,儘管它仍然不適合我。其中一個答案提出了將門區域裁剪出來,看起來效果很好。我猜想黑暗的大門讓打火機牆迷惑了算法。 –
我使用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)
你可能想添加'c = cv。cornerSubPix(img2,c);'在檢測之後使用亞像素精度來優化角位置。 – Amro
謝謝!這意味着左邊的門混淆了算法。我想知道爲什麼?經過直方圖調整後,它對我來說工作得很好。 –
如果您有計算機視覺系統工具箱,你可以使用detectCheckerboardPoints
功能。它在沒有任何預處理的情況下工作,併爲您提供亞像素精度。
我看到了,給自己說明一下:get 2013b! –
在這種情況下,您應該查看2013年的相機校準器應用程序。 http://www.mathworks.com/help/vision/ug/find-camera-parameters-with-the-camera-calibrator.html – Dima
只是注意,您預計棋盤有看起來已經扭曲 – berak
我不覺得,說實話,我認爲這將是一個相當簡單的情況下,該算法去努力,但我猜門是問題。直方圖調整做到了! –