我正在使用OpenCV 3.1使用SimpleBlobDetector进行一些 Blob 检测,但是我没有运气,也没有教程能够解决这个问题。我的环境是x64上的XCode。
我从这张图片开始:
然后,我将其转换为灰度:
最后,我将其转换为二进制图像并对此进行 Blob 检测:
我已经包含了“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();
关键点 vector 始终为空。我没有尝试过任何工作。
最佳答案
所以我解决了这个问题,没有阅读文档上的详细说明。感谢Dai指导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);
做到了。