2017-04-05 30 views
1

我一直在使用opencv-3.2做關於Python的計算機視覺的任務。 現在我很難提取特徵點的準確位置。 圖片就像this你有沒有一個好主意,提取特徵點的位置

二進制圖像就像 this

我必須知道板中橢圓的精確位置。

我嘗試使用cv2.findContours,但我發現很難獲得滿意的結果。選擇一塊可以減少噪音影響的區域後,我正在考慮使用cv2.findContours。但是,考慮到照片的數量,這是很難實現的。 所以我正在尋找一個更好的主意。

+0

你見過[this](http://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/hough_circle/hough_circle.html) –

+0

確定這似乎有效,明天我會試試。無論如何,睡覺時間,thx! – lelle

+0

[this](http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_houghcircles/py_houghcircles.html)適用於python – lelle

回答

0

繼評論,存在用於實現該兩種可能的方法:

方法1SimpleBlobDetector

該檢測器被調諧以檢測圓形斑點。 代碼C++

Mat image = imread("image.jpg"); 
Ptr<FeatureDetector> blobsDetector = FeatureDetector::create("SimpleBlob"); 
vector<KeyPoint> keypoints; 
blobsDetector->detect(image, keypoints); 
// Drawing 
Mat drawImage = image.clone(); 
for (size_t i = 0; i < keypoints.size(); ++i){ 
    circle(drawImage, keypoints[i].pt, 4, Scalar(255, 0, 255), -1); } 
imwrite("result.png", drawImage);` 

方法2:由於OP所述輪廓檢測。 Reference 輪廓可能需要爲參考圖像過濾。你可以這樣做:

  1. 創建兩個零像素值的二進制圖像,一個是繪製輪廓,另一個是繪製橢圓。

  2. 掃描每個輪廓並將其繪製在二進制圖像中,同時將橢圓繪製到其他二進制對應的輪廓。對於這兩種情況,請使用CV_FILLED作爲厚度參數。

  3. 現在在兩個二值圖像之間執行bitwise_xor並計算結果上的非零像素的數量。如果結果接近零,則輪廓與橢圓相同,否則不相等。

  4. 重複每個輪廓。

PS。我仍然認爲HoughTransform可以工作,但是使用哪種方法取決於你自己決定。 希望它有幫助!