OpenCV2D 特征框架 (11)特征检测与描述用于检测二值图像中连通区域(即“斑点”或“blob”)的类cv::SimpleBlobDetector的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

cv::SimpleBlobDetector 是 OpenCV 中用于检测二值图像中连通区域(即"斑点"或"blob")的类。这些连通区域可以是白色前景中的黑色斑点,也可以是黑色背景中的白色斑点。SimpleBlobDetector 可以识别不同形状、大小和亮度的斑点,并且可以设置参数来过滤掉不符合特定条件的斑点。

从 OpenCV 3.0 开始,SimpleBlobDetector 的创建方式有所变化。它现在是一个工厂方法 create 返回的一个指针对象,而不是直接实例化类的对象。这允许通过修改参数来配置检测器的行为,而无需改变代码逻辑。

下面是一些重要的成员函数和属性:

  • 构造函数:
    在 OpenCV 3.x 和更新版本中,推荐使用 cv::SimpleBlobDetector::create() 方法来创建 SimpleBlobDetector 对象,该方法返回一个指向 Ptrcv::SimpleBlobDetector 类型的智能指针。
  • 成员函数:
    • void detect(const cv::Mat& image, std::vectorcv::KeyPoint& keypoints) 检测输入图像中的斑点,并将结果存储在 keypoints 向量中。每个 cv::KeyPoint 表示一个斑点的位置、大小和其他信息。
    • void setParams(const SimpleBlobDetector::Params& params) 设置斑点检测器的参数。这通常是在创建检测器之后立即调用,以配置其行为。
    • Params getParams() const 获取当前设置的参数。
  • 成员类型:
    • struct Params 包含了可以调整的各种参数,例如斑点的最小面积、最大面积、圆度范围、凸性等。你可以通过修改 Params 结构体内的成员变量来自定义斑点检测的过程。

代码示例

cpp 复制代码
#include <opencv2/features2d.hpp>
#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    // 加载图像并转换为灰度图
    Mat image = imread( "/media/dingxin/data/study/OpenCV/sources/images/smarties.png", IMREAD_GRAYSCALE );
    if ( image.empty() )
    {
        std::cout << "Could not open or find the image" << std::endl;
        return -1;
    }

    // 配置斑点检测器参数
    SimpleBlobDetector::Params params;

    // 改变默认参数
    params.filterByArea = true;
    params.minArea      = 100;

    params.filterByCircularity = true;
    params.minCircularity      = 0.1;

    params.filterByConvexity = true;
    params.minConvexity      = 0.87;

    params.filterByInertia = true;
    params.minInertiaRatio = 0.01;

    // 创建斑点检测器
    Ptr< SimpleBlobDetector > detector = SimpleBlobDetector::create( params );

    // 检测斑点
    std::vector< KeyPoint > keypoints;
    detector->detect( image, keypoints );

    // 绘制斑点并显示
    Mat outputImage;
    drawKeypoints( image, keypoints, outputImage, Scalar::all( -1 ), DrawMatchesFlags::DEFAULT );
    imshow( "Detected Blobs", outputImage );
    waitKey( 0 );

    return 0;
}

运行结果

相关推荐
lxmyzzs3 小时前
pyqt5无法显示opencv绘制文本和掩码信息
python·qt·opencv
山烛12 小时前
OpenCV 图像处理基础操作指南(二)
人工智能·python·opencv·计算机视觉
R-G-B16 小时前
【P38 6】OpenCV Python——图片的运算(算术运算、逻辑运算)加法add、subtract减法、乘法multiply、除法divide
人工智能·python·opencv·图片的运算·图片加法add·图片subtract减法·图片乘法multiply
hllqkbb17 小时前
从 SGD 到梯度累积:Epoch、Batch、Step 的关系全解析
开发语言·人工智能·opencv·计算机视觉·batch
CallZhang2101 天前
Vision Master的C#脚本与opencv联合编程
opencv·计算机视觉·c#·视觉检测
一百天成为python专家1 天前
Python循环语句 从入门到精通
开发语言·人工智能·python·opencv·支持向量机·计算机视觉
kyle~2 天前
OpenCV---特征检测算法(ORB,Oriented FAST and Rotated BRIEF)
人工智能·opencv·算法
lxmyzzs2 天前
【图像算法 - 16】庖丁解牛:基于YOLO12与OpenCV的车辆部件级实例分割实战(附完整代码)
人工智能·深度学习·opencv·算法·yolo·计算机视觉·实例分割
R-G-B2 天前
OpenCV Python——Numpy基本操作(Numpy 矩阵操作、Numpy 矩阵的检索与赋值、Numpy 操作ROI)
python·opencv·numpy·numpy基本操作·numpy 矩阵操作·numpy 矩阵的检索与赋值·numpy 操作roi
hllqkbb2 天前
人体姿态估计-动手学计算机视觉14
人工智能·opencv·计算机视觉·分类