BlobDetector的使用与参数说明(OpenCV/C++)

通过opencv的BlobDetector方法可以检测斑点、圆点、椭圆等形状

以下是使用方式及代码说明:

1、导入必要的OpenCV库和头文件。

复制代码
#include <opencv2/opencv.hpp>
#include <opencv2/blob/blobdetector.hpp>

2、读取图像并将其转换为灰度图像。

复制代码
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);

3、创建一个BlobDetector对象,并设置相关参数。

复制代码
cv::SimpleBlobDetector::Params params;

// 设置检测圆的阈值
params.minThreshold = 10;
params.maxThreshold = 200;

//设置识别的预期颜色
//params.blobColor = 0;    //0表示预期检测圆的颜色为白色

// 用于过滤面积小的blob
params.filterByArea = false;    //true表示启动该功能,false表示关闭该功能
params.minArea = 0.1;

//用于过滤不符合圆形形状的blob
params.filterByCircularity = true;
params.minCircularity = 0.8;

//用于过滤不规则或者非凸的blob
params.filterByConvexity = true;
params.minConvexity = 0.8;

//用于过滤不符合椭圆形状的blob
params.filterByInertia = true;
params.minInertiaRatio = 0.8;

// 创建BlobDetector对象
cv::Ptr<cv::SimpleBlobDetector> detector = cv::SimpleBlobDetector::create(params);

4、使用BlobDetector在图像中检测圆形。

复制代码
std::vector<cv::KeyPoint> keypoints;
detector->detect(image, keypoints);

5、绘制检测到的圆。

复制代码
cv::Mat imageWithKeypoints;
cv::drawKeypoints(image, keypoints, imageWithKeypoints, cv::Scalar(0, 0, 255), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);

6、显示并保存带有检测到的圆的图像。

复制代码
cv::imshow("Circle Detection", imageWithKeypoints);
cv::waitKey(0);
cv::imwrite("result.jpg", imageWithKeypoints);
相关推荐
saltymilk2 小时前
使用 C++ 模拟 ShaderLanguage 的 swizzle
c++·模板元编程
xlp666hub8 小时前
Leetcode第五题:用C++解决盛最多水的容器问题
linux·c++·leetcode
得物技术9 小时前
搜索 C++ 引擎回归能力建设:从自测到工程化准出|得物技术
c++·后端·测试
xlp666hub1 天前
Leetcode 第三题:用C++解决最长连续序列
c++·leetcode
会员源码网1 天前
构造函数抛出异常:C++对象部分初始化的陷阱与应对策略
c++
xlp666hub1 天前
Leetcode第二题:用 C++ 解决字母异位词分组
c++·leetcode
不想写代码的星星1 天前
static 关键字:从 C 到 C++,一篇文章彻底搞懂它的“七十二变”
c++
xlp666hub2 天前
Leetcode第一题:用C++解决两数之和问题
c++·leetcode
不想写代码的星星2 天前
C++继承、组合、聚合:选错了是屎山,选对了是神器
c++
不想写代码的星星3 天前
std::function 详解:用法、原理与现代 C++ 最佳实践
c++