2016-04-10 13 views
1

Ich verwende OpenCV 3.1, um einige Blob-Erkennung mit SimpleBlobDetector zu tun, aber ich habe kein Glück und kein Tutorial konnte dies zu lösen. Meine Umgebung ist XCode auf x64.SimpleBlobDetector in opencv erkennt nichts

Ich fange mit diesem Bild aus: enter image description here

Dann ist es in Graustufen Ich bin aus: enter image description here

Schließlich ich es in ein binäres Bild drehen und die Blob-Erkennung auf diese Weise: enter image description here

Ich habe "iostream" und "opencv2/opencv.hpp" aufgenommen.

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(); 

Der Vektor der Schlüsselpunkte ist immer leer. Nichts, was ich versucht habe funktioniert.

+0

Ihr Code konfiguriert den 'SimpleBlobDetector' überhaupt nicht. Es ist wahrscheinlich, dass die Standardkonfiguration ('minArea',' maxArea' usw.) für die Art von Bildern, die Sie verarbeiten, ungeeignet ist. – Dai

+0

Hier ist das Blob-Detektor-Beispiel auf Github von OpenCV, sehen Sie, wie sie es konfigurieren, indem Sie zuerst das 'pDefaultBLOB'-Parameterobjekt setzen: https://github.com/Itseez/opencv/blob/2f4e38c8313ff313de7c41141d56d945d91f47cf/samples/cpp/detect_blob.cpp – Dai

+0

Danke Dai - Ich habe versucht, ein paar Params aufzustellen. Ich habe 'minArea' verwendet und es auf 1 und' maxArea' auf 1000 gesetzt. Habe es auch nicht getan :( –

Antwort

7

Also habe ich das gelöst, nicht das Kleingedruckte auf der Dokumentation gelesen. Danke Dai für die Heads up auf den Params, ließ mich die Docs genauer unter die Lupe nehmen.

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

musste ich einfach tun, wenn das SimpleBlobDetector Objekt erstellen:

SimpleBlobDetector::Params params; 

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

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

Dies tat es.