2016-04-10 61 views
1

我使用OpenCV 3.1來使用SimpleBlobDetector做一些blob檢測,但我沒有運氣,沒有教程能夠解決這個問題。我的環境是x64上的XCode。opencv中的SimpleBlobDetector沒有檢測到任何東西

我開始了與此圖像: enter image description here

然後,我把它變成灰階: enter image description here

最後,我把它變成一個二進制圖像,做這個的斑點檢測: enter image description here

我已經包含「iostream」和「opencv2/opencv.hpp」。

using namespace cv; 
using namespace std; 

Mat img_rgb; 
Mat img_gray; 
Mat img_keypoints;  
Ptr<SimpleBlobDetector> detector = SimpleBlobDetector::create(); 

vector<KeyPoint> keypoints; 

img_rgb = imread("summertriangle.jpg"); 

//Convert to greyscale 
cvtColor(img_rgb, img_gray, CV_RGB2GRAY); 

imshow("Grey Scale", img_gray); 

// Start by creating the matrix that will allocate the new image 
Mat img_bw(img_gray.size(), img_gray.type()); 

// Apply threshhold to convert into binary image and save to new matrix 
threshold(img_gray, img_bw, 100, 255, THRESH_BINARY); 

// Extract cordinates of blobs at their centroids, save to keypoints variable. 
detector->detect(img_bw, keypoints); 
cout << "The size of keypoints vector is: " << keypoints.size(); 

關鍵點矢量總是空的。我沒有嘗試過的作品。

+0

你的代碼根本沒有配置'SimpleBlobDetector'。很可能默認配置('minArea','maxArea'等)不適合您正在處理的圖像。 – Dai

+0

這是OpenCV的Github上的blob-detector示例,請參閱它們如何通過首先設置「pDefaultBLOB」params對象來配置它:https://github.com/Itseez/opencv/blob/2f4e38c8313ff313de7c41141d56d945d91f47cf/samples/cpp/detect_blob.cpp – Dai

+0

謝謝戴 - 我嘗試設置一些參數。我使用了'minArea',並將其設置爲1,將'maxArea'設置爲1000.沒有這樣做: –

回答

7

所以我解決了這個問題,沒有閱讀文檔上的細則。感謝戴在Params上的表現,讓我更仔細地看了文檔。

Default values of parameters are tuned to extract dark circular blobs.

創建SimpleBlobDetector對象時,我不得不簡單地做到這一點:

SimpleBlobDetector::Params params; 

params.filterByArea = true; 
params.minArea = 1; 
params.maxArea = 1000; 
params.filterByColor = true; 
params.blobColor = 255; 

Ptr<SimpleBlobDetector> detector = SimpleBlobDetector::create(params); 

這做到了。