opencv 中的 SimpleBlobDetector 没有检测到任何东西
Posted
技术标签:
【中文标题】opencv 中的 SimpleBlobDetector 没有检测到任何东西【英文标题】:SimpleBlobDetector in opencv does not detect anything 【发布时间】:2016-04-10 03:47:02 【问题描述】:我正在使用 OpenCV 3.1 使用 SimpleBlobDetector 进行一些 blob 检测,但我没有运气,也没有教程能够解决这个问题。我的环境是 x64 上的 XCode。
我从这张图片开始:
然后我把它变成灰度:
最后我把它变成一个二进制图像并对此进行斑点检测:
我已经包含了“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();
关键点向量始终为空。我尝试过的没有任何效果。
【问题讨论】:
您的代码根本没有配置SimpleBlobDetector
。默认配置(minArea
、maxArea
等)可能不适用于您正在处理的图像类型。
这是 OpenCV 的 Github 上的 blob-detector 示例,看看他们如何通过首先设置 pDefaultBLOB
参数对象来配置它:github.com/Itseez/opencv/blob/…
谢谢戴——我确实尝试设置一些参数。我使用minArea
并将其设置为1 并将maxArea
设置为1000。也没有这样做:(
【参考方案1】:
所以我解决了这个问题,没有阅读文档上的细则。感谢 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);
做到了。
【讨论】:
以上是关于opencv 中的 SimpleBlobDetector 没有检测到任何东西的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV 3:openCV 3.3.1 中的透视变换有啥问题?