0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCV4图像分析之BLOB特征分析

OpenCV学堂 来源:OpenCV学堂 2023-12-28 12:28 次阅读

Blob分析

BLOB是图像中灰度块的一种专业称呼,更加变通一点的可以说它跟我们前面二值图像分析的联通组件类似,通过特征提取实现常见的各种灰度BLOB对象组件检测与分离。使用该检测器的时候,可以根据需要输入不同参数,得到的结果跟输入的参数息息相关。

Blob分析函数与演示

OpenCV中的Blob分析函数为SimpleBlobDetector,OpenCV中支持实现常见的BLOB分析过滤,如下所示:

-根据BLOB面积过滤
-根据灰度/颜色值过滤
-根据圆度过滤
-根据长轴与短轴过滤
-根据凹凸进行过滤

对应的参数列表如下:

SimpleBlobDetector::Params()
bool        filterByArea
bool        filterByCircularity
bool        filterByColor
bool        filterByConvexity
bool        filterByInertia
float        maxArea
float        maxCircularity
float        maxConvexity
float        maxInertiaRatio
float        maxThreshold
float        minArea
float        minCircularity
float        minConvexity
float        minDistBetweenBlobs
float        minInertiaRatio
OpenCV中Blob检测示例代码如下:
#include"opencv2/opencv.hpp"
#include

usingnamespacecv;
usingnamespacestd;

intmain(intargc,char**argv)
{
//加载图像
Matsrc=imread("D:/lena.jpg");
Matgray;
cvtColor(src,gray,COLOR_BGR2GRAY);
cv::imshow("输入图像",src);

//初始化参数设置
SimpleBlobDetector::Paramsparams;
params.minThreshold=10;
params.maxThreshold=240;
params.filterByArea=true;
params.minArea=50;
params.filterByCircularity=true;
params.minCircularity=0.1;
params.filterByConvexity=true;
params.minConvexity=0.5;
params.filterByInertia=true;
params.minInertiaRatio=0.5;

//创建BLOBDetetor
Ptrdetector=SimpleBlobDetector::create(params);

//BLOB分析与显示
Matresult;
vectorkeypoints;
detector->detect(gray,keypoints);
for(autokpt:keypoints){
std::cout<< "key point radius: " << kpt.size << std::endl;
        cv::circle(src, kpt.pt, 2, cv::Scalar(0, 255, 0), 2, 8, 0);
        cv::circle(src, kpt.pt, kpt.size/2, cv::Scalar(255, 0, 255), 3, 8, 0);
    }
    imshow("Blob检测-OpenCV学堂", src);
    waitKey(0);
}
演示效果如下:

65d844bc-a535-11ee-8b88-92fbcf53809c.png

特殊使用技巧

SimpleBlobDetector 函数有两个很诡异的地方。 第一个是实现的默认参数支持与参数检查 OpenCV中SimpleBlobDetector函数默认的参数值如下:

thresholdStep = 10;
minThreshold = 50;
maxThreshold = 220;
minRepeatability = 2;
minDistBetweenBlobs = 10;


filterByColor = true;
blobColor=0;


filterByArea = true;
minArea = 25;
maxArea=5000;


filterByCircularity = false;
minCircularity = 0.8f;
maxCircularity=std::numeric_limits::max();


filterByInertia = true;
//minInertiaRatio = 0.6;
minInertiaRatio = 0.1f;
maxInertiaRatio=std::numeric_limits::max();


filterByConvexity = true;
//minConvexity = 0.8;
minConvexity = 0.95f;
maxConvexity = std::numeric_limits::max();


collectContours = false;
每次执行之前都会进行断言检查,但是OpenCV中同时提供了是否启用Blob各种过滤开关选项,但是无论开关选项是否启用,这个断言检查都是检查全部属性值,这个就导致你设置选项为false的时候,必须填写对应选项的选项值,否则就无法执行Blob检测函数。对应的源码文件 blobdetector.cpp发现了这段代码作为佐证:
staticvoidvalidateParameters(constSimpleBlobDetector::Params&p)
{
if(p.thresholdStep<= 0)
      CV_Error(Error::StsBadArg, "thresholdStep>0");

if(p.minThreshold>p.maxThreshold||p.minThreshold< 0)
      CV_Error(Error::StsBadArg, "0<=minThreshold<=maxThreshold");

  if (p.minDistBetweenBlobs <=0 )
      CV_Error(Error::StsBadArg, "minDistBetweenBlobs>0");

if(p.minArea>p.maxArea||p.minArea<=0)
      CV_Error(Error::StsBadArg, "0p.maxCircularity||p.minCircularity<= 0)
      CV_Error(Error::StsBadArg, "0p.maxInertiaRatio||p.minInertiaRatio<= 0)
      CV_Error(Error::StsBadArg, "0p.maxConvexity||p.minConvexity<= 0)
      CV_Error(Error::StsBadArg, "0
 第二个是现实的默认输入图像的背景必须是白色 如果是黑色背景图像输入,Blob检测所有的参数就直接失效了,但是官方开发教程示例代码与函数文档都没有说明这点,导致很多新手小白不明所以就直接掉坑了,然后就放弃使用这个函数了。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    3882

    浏览量

    61310
  • OpenCV
    +关注

    关注

    29

    文章

    611

    浏览量

    40786
  • 图像分析
    +关注

    关注

    0

    文章

    80

    浏览量

    18563
  • BLOB
    +关注

    关注

    0

    文章

    13

    浏览量

    10054

原文标题:OpenCV4图像分析之BLOB特征分析

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    OpenCV4.8 CUDA编程代码教程

    OpenCV4支持通过GPU实现CUDA加速执行,实现对OpenCV图像处理程序的加速运行,当前支持加速的模块包括如下。
    的头像 发表于 12-05 09:56 453次阅读
    <b class='flag-5'>OpenCV</b>4.8 CUDA编程代码教程

    图像频率域分析傅里叶变换

    文章目录傅里叶变换基础傅里叶级数傅里叶积分傅里叶变换一维连续傅里叶变换一维离散傅里叶变换二维离散傅里叶变换正变换反变换卷积卷积定理数字图像DFT空间域和频域图像频域滤波基本步骤图像频率特性分析
    发表于 05-22 07:41

    Vivado HLS实现OpenCV图像处理的设计流程与分析

    ,或者在更大的图像中对需要的特征或区域进行处理是,OpenCV似乎足以满足很多应用的要求,但对于高分辨率高帧率实时处理的场景下,OpenCV很难满足高性能和低功耗的需求。基于视频流的架
    发表于 07-08 08:30

    CMake在Linux 6.1.1-1.0.0中搜索包opencv损坏了吗?

    ] 但是这个文件不存在。 并尝试使用图像 imx-image-full 的 SDK,我收到以下错误: sysroots/armv8a-poky-linux/usr/lib/cmake/opencv4
    发表于 05-09 11:32

    Blob在S3C2440A上的移植

    Blob(Boot Loader Object)是一款功能强大的Bootloader,多用于S3C44B0而少用于S3C2440A。介绍了常见的Bootloader;归纳了Blob的主要特征
    发表于 12-17 16:31 26次下载

    纹理特征分析特征量计算

    纹理特征分析特征量计算 本文采取的系统结构如图1所示,所需要分类的图像经过预处理,所以不涉及图像预处理过程。
    发表于 03-01 17:48 1978次阅读
    纹理<b class='flag-5'>特征</b><b class='flag-5'>分析</b>及<b class='flag-5'>特征</b>量计算

    基于OpenCV图像特征智能识别系统设计

    对于图像监控而言,多数监控只是简单的捕捉图像、处理图像,最后再通过人工进行识别,缺少智能监控,特别是针对某一特定需求的特征识别。本文设计一种基于Op
    发表于 12-31 09:20 20次下载

    基于OpenCV3.1的图像特征描述功能实现

    本文档的主要内容详细介绍的是OpenCV3.1的使用教程之图像特征描述的详细资料说明。
    发表于 03-29 14:26 10次下载

    浅述一种基于局部特征分析的多聚焦图像融合方法

    提出了一种基于局部特征分析的多聚焦图像融合方法。首先采用二维经验模式分解(BEMD)对不同聚焦图像进行分解,
    的头像 发表于 05-05 08:20 2284次阅读
    浅述一种基于局部<b class='flag-5'>特征</b><b class='flag-5'>分析</b>的多聚焦<b class='flag-5'>图像</b>融合方法

    基于OpenCV如何提取中心线

    问题 前几天有个人问了我一个问题,问题是这样的,他有如下的一张二值图像: 怎么得到白色Blob中心线,他希望的效果如下: 显然OpenCV中常见的轮廓分析无法获得上面的中心红色线段,本
    的头像 发表于 04-26 13:51 3387次阅读

    基于opencv4和Yolo-Fastest,实现PC和单片机通信,控制步进电机捕获目标

    效果视频 基于opencv4和yolo,实现PC和单片机通信,控制步进电机捕获目标
    发表于 11-23 17:36 15次下载
    基于<b class='flag-5'>opencv4</b>和Yolo-Fastest,实现PC和单片机通信,控制步进电机捕获目标

    如何在Raspberry Pi 3上安装OpenCV4

    今天我们将学习如何在 Raspberry Pi 3 上安装 OpenCV4 库,以便我们可以将其用于计算机视觉应用程序。这将允许 OpenCV 在像 Pi 这样的便携式设备上运行,从而打开许多可能性的大门。所以让我们开始吧
    的头像 发表于 09-08 16:09 1369次阅读
    如何在Raspberry Pi 3上安装<b class='flag-5'>OpenCV4</b>库

    学习OpenCV4的系统化路线图

    OpenCV4发布测试版本开始,作者就一直关注!根据自己近十年图像处理OpenCV开发相关工作经验,花了七个月的时间,针对OpenCV4、精心选择
    的头像 发表于 07-05 11:30 370次阅读
    学习<b class='flag-5'>OpenCV4</b>的系统化路线图

    OpenCV二值图像分析

    二值图像分析最常见的一个主要方式就是轮廓发现与轮廓分析,其中轮廓发现的目的是为轮廓分析做准备,经过轮廓分析我们可以得到轮廓各种有用的属性信息
    的头像 发表于 10-20 12:25 352次阅读

    OpenCV4图像的轮廓

    图像的轮廓是指图像中具有相同颜色或灰度值的连续点的曲线。轮廓和边缘是有联系的,边缘是轮廓的基础,轮廓是边缘的连续集合。
    的头像 发表于 01-02 12:24 232次阅读