SimpleBlobDetector的使用

一、概述

Blob是指图像中的一块连通区域,Blob(灰度块)检测就是对前景/背景分离后的二值图像,进行连通域提取和标记。通过特征提取实现对灰度图像中特定对象组件的检测与分离。

SimpleBlobDetector的使用,Blob(斑点)筛选条件:斑点颜色、面积、圆度、惯性率、凸度。

二、findCirclesGrid函数检测无报错

项目时发现OpenCV的findCirclesGrid函数对圆形标定板的检测效果并不稳定,有时完全检测不到圆心。或者在使用的时候,获取的图像比较模糊,检测时候运行程序不报错,运行时间长,会卡住(特征点圆心数量不对或者为空时候,findCirclesGrid源程序不报错,查资料说更新opencv4.x版本可解决,待验证)。那么可以利用用SimpleBlobDetector搞定圆形标定板圆心提取,通过SimpleBlobDetector检测的数量进行判断。

三、示例

复制代码
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include <fstream>
#include <string>
 
 
using namespace std;  
using namespace cv;  
 

// 主函数示例
int main() 
{
    // 1.读取图像
    Mat imgc = imread("circle.jpg");  // siemens_star72.jpg   correct0602.jpg

    // 通过 SimpleBlobDetector::Params 结构体配置检测阈值、面积过滤、圆度、凸度等条件,精准筛选目标斑点

    // 2.初始化参数设置
    SimpleBlobDetector::Params params;
    params.minThreshold = 10;        // 最小阈值 //二值化的阈值步长
    params.maxThreshold = 240;       // 最大阈值
    params.filterByArea = true;      // 启用面积过滤
    params.minArea = 20;            // 最小面积
    params.maxArea = 80000;          // 最大面积

    params.filterByCircularity = true;// 启用圆度过滤
    params.minCircularity = 0.1;     // 最小圆度
    params.filterByConvexity = true; // 启用凸性过滤
    params.minConvexity = 0.5;       // 最小凸性
    params.filterByInertia = true;   // 启用惯性比过滤
    params.minInertiaRatio = 0.5;    // 最小惯性比
   
    // 3.检测斑点
    // 使用SimpleBlobDetector :: create方法创建智能指针调用该算法
    // 创建斑点检测器(Blob Detector)
    Ptr<SimpleBlobDetector> detector = SimpleBlobDetector::create(params);  
    
    vector<KeyPoint> key_points;
    detector->detect(imgc, key_points);

    // 4.打印检测斑点的数量
    cout <<" key_points.size()=" << key_points.size() << endl;

    // 5.绘制检测斑点
    Mat output_img;
    drawKeypoints(imgc, key_points, output_img, Scalar(0, 0, 255), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);

    namedWindow("SimpleBlobDetector", WINDOW_NORMAL);
    imshow("SimpleBlobDetector", output_img);
   
    cv::waitKey(0); 
    return 0;
}
相关推荐
Rattenking7 小时前
OpenCV 轨迹栏操作和键盘响应操作
人工智能·opencv·计算机外设
ahccqw3 天前
OpenCV 车辆数量统计
人工智能·opencv·计算机视觉
架构师伯子明3 天前
ffmpeg学习4:opencv在音视频领域常用指令
opencv·学习·ffmpeg
LongRunning5 天前
【Linux】RK3568-OpenCV+YOLO(八)
linux·opencv·yolo
会飞锦鲤7 天前
基于 SVM + HOG 的铸造缺陷检测系统
python·opencv·机器学习·计算机视觉·缺陷检测·图像分类·svm
小豆庄11 天前
本地视频打码:多模型检测、帧间追踪与18种模糊的选型
opencv·目标检测·ai·自然语言处理·音视频·视频
爱吃火鸡面呀11 天前
OpenCV 颜色识别实战:从 HSV 原理到摄像头实时检测
人工智能·opencv·计算机视觉
ahccqw11 天前
OpenCV 缩放 与 位移
人工智能·opencv·计算机视觉
AI的探索之旅12 天前
OpenCV Day40 —— K-means 聚类与 EM 高斯混合
opencv·kmeans·聚类
AI的探索之旅12 天前
OpenCV Day39 —— 无缝克隆 seamless cloning(cloning_demo / cloning_gui)
人工智能·opencv