我搜索了一下网上,在这里使用搜索上的计算器,但还没有找到完全是我一直在寻找这个问题。所以basicaly我使用简单的斑点检测,从OpenCV的,让我在图像的白色区域(这已经是二进制)和非常相似的图像,我得到的方面非常diferent结果被检测出并斑点都没有,在这里在定义simpleblobdetector时是我的参数。OpenCV的简单的斑点检测,得到一些未被发现的斑点
正如你可以看到一些斑点都没有beeing检测,这里是我的探测器的配置:
void blobDetect(cv::Mat img) {
cv::SimpleBlobDetector::Params params;
if (Daytime) {
params.minThreshold = 23;
params.maxThreshold = 25;
}
else {
params.minThreshold = 3;
params.maxThreshold = 5;
}
params.thresholdStep = 1;
params.filterByColor = true;
params.blobColor = 255;
params.filterByArea = true;
params.minArea = 300;
params.maxArea = 400000;
params.filterByCircularity = false;
//params.minCircularity = "";
params.filterByConvexity = false;
//params.minConvexity = "";
params.filterByInertia = false;
//params.minInertiaRatio = "";
cv::Ptr<cv::SimpleBlobDetector> detector = cv::SimpleBlobDetector::create(params);
std::vector<cv::KeyPoint> keypoints;
detector->detect(img, keypoints);
cv::Mat im_with_keypoints;
std::cout << keypoints.size() << std::endl;
drawKeypoints(img, keypoints, im_with_keypoints, cv::Scalar(0, 0, 255), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
imshow("display4", im_with_keypoints);
}
所以我想问,是不是因为形状和大小的斑点?(我怀疑这个选项,因为在某些情况下,它可以找到大面积的奇怪形状)我认为简单的斑点检测可以找到任何一组像素,是更适合圆形斑点或类似的东西?我应该考虑使用另一种算法还是构建自己的算法?或者有没有办法让我解决这个问题,并提高简单斑点检测的准确性?
我知道这些都是很多的问题,但预先感谢您的任何帮助,你可以给!
Blob探测器是相当古老的OpenCV,为什么找不到轮廓和按区域分类? –
我明白你的意思了,我会试试这个!我认为会有更好的办法来解决这个问题,但是由于我还没有经验,我无法找出哪条路可走!我会发布结果:)谢谢! –