Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >OpenCV中BLOB特征提取与几何形状分类

OpenCV中BLOB特征提取与几何形状分类

作者头像
OpenCV学堂
发布于 2018-04-04 03:03:08
发布于 2018-04-04 03:03:08
4K00
代码可运行
举报
运行总次数:0
代码可运行

OpenCV中BLOB特征提取与几何形状分类

一:方法

二值图像几何形状提取与分离,是机器视觉中重点之一,在CT图像分析机器人视觉感知等领域应用广泛,OpenCV中提供了一个对二值图像几何特征描述与分析最有效的工具 - SimpleBlobDetector类,使用它可以实现对二值图像几何形状的分离与分析。而它之所以强大是因为整合OpenCV中其它一些API的功能,主要是有三个:

  • 自动的图像灰度与二值化,根据输入的步长与阈值,得到半径
  • 实现了轮廓查找功能,可以查找所有轮廓,
  • 然后在此基础上基于几何矩的计算实现各种基于几何特征的过滤

在学习Blob特征检测器相关函数之前,我们首先看一下Blob几何特征过滤时候用到几何特征

面积

BLOB特征检测器可以根据面积大小对结果进行过滤,只有面积在指定范围内的几何形状才会被BLOB特征检出并标注。这样就可以通过它实现基于几何形状面积的大小分类。需要说明的是这里的面积是基于像素单位的,主要是利于几何矩进行计算得到。

圆度

圆度的公式可以表示为

  • 当C等于1时候,该形状表示一个完美的圆形
  • 当C趋近于0的时候,该形状表示接近于直线的多边形或者矩形。
  • 当C值在0.75 ~ 0.85之间的时候,多数的时候表示与矩形或者等边的多边形出现。

惯性率

惯性率是跟偏心率,圆形的偏心率等于0, 椭圆的偏心率介于0和1之间,直线的偏心率接近于0, 基于几何矩计算惯性率比计算偏心率容易,所以OpenCV选择了惯性率这个特征值,根据惯性率可以计算出来偏心率,偏心率与惯性率之间关系表示如下

凸度

表示几何形状是凸包还是凹包的度量。说白了就是可以根据参数过滤凸多边形还是凹多边形, 输入的参数一般在0~1之间,最小为0,最大为1。一般圆形多会大于0.5以上

二 演示

演示部分通过两个例子来说明BLOB特征不同用法,第一个例子通过BLOB特征检测向日葵的葵盘,第二例子通过BLOB特征检测来对几何形状进行过滤分类。

示例一 :原图

BLOB检测结果

相关的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 初始化BLOB参数SimpleBlobDetector::Params params;params.minDistBetweenBlobs = 0.0f;params.filterByInertia = false;params.filterByConvexity = false;params.filterByColor = false;params.filterByCircularity = false;params.filterByArea = false;// 声明根据面积过滤,设置最大与最小面积params.filterByArea = true;params.minArea = 20.0f;params.maxArea = 2000.0f;// 声明根据圆度过滤,设置最大与最小圆度params.filterByCircularity = true;params.minCircularity = 0.5;params.maxCircularity = 1.0;// 凸包形状分析 - 过滤凹包params.filterByConvexity = true;params.minConvexity = 0.5;params.minConvexity = 1.0;// 参数初始化BLOB检测器,Ptr<SimpleBlobDetector> detector = SimpleBlobDetector::create(params);vector<KeyPoint> keypoints;// 检测得到特征与绘制特征detector->detect(src, keypoints, Mat());Mat kp_image;drawKeypoints(src, keypoints, kp_image, Scalar(255, 0, 0), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);imshow("keypoints", kp_image);

示例二:原图

参数不同过滤运行结果

蓝色与红色是检测结果表示

相关代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 几何形状过滤// 声明根据面积过滤,设置最大与最小面积params.filterByArea = true;params.minArea = 1000.0f;params.maxArea = 12000.0f;// 声明根据圆度过滤,设置最大与最小圆度params.filterByCircularity = true;params.minCircularity = 0.7;params.maxCircularity = 0.8;// 凸包形状分析 - 过滤凹包params.filterByConvexity = true;params.minConvexity = 0.0;params.minConvexity = 0.5;// 参数初始化BLOB检测器,Ptr<SimpleBlobDetector> detector = SimpleBlobDetector::create(params);vector<KeyPoint> keypoints;// 检测得到特征与绘制特征detector->detect(src, keypoints, Mat());Mat kp_image;drawKeypoints(src, keypoints, kp_image, Scalar(0, 0, 255), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);imshow("keypoints", kp_image);

总结:

图像的BLOB特征提取与分析,除了使用SimpleBlobDetector类之外还可以通过findContours与几何矩Moments计算相结合来实现。后者更加考察对OpenCV相关API函数熟悉程度与图像处理相关知识的掌握程度。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OpenCV 斑点检测
斑点通常是指与周围有着颜色和灰度差别的区域。有时图像中的斑点也是我们关心的区域,比如在医学影像中或质量检测领域,我们需要从一些X光图片或普通光学照片中提取一些具有特殊意义的斑点的数量和坐标信息。
用户6021899
2019/09/25
4.1K0
OpenCV 斑点检测
【CV 向】如何打造一个“数串串神器“
之前吃串串火锅,老板数竹签不是称重就是用手慢慢数,但是称重似乎总是得不到正确的竹签数目,而且容易暗箱操作;而慢慢数总是要等待比较长的时间,感觉两者对处理数竹签的问题都存在比较大的缺陷。因此,一款可以数竹签的应用因此产生,一下就弥补了两种处理方式所存在的缺陷。
繁依Fanyi
2023/11/06
8060
使用 OpenCV 对图像进行特征检测、描述和匹配
在本文中,我将讨论使用 OpenCV 进行图像特征检测、描述和特征匹配的各种算法。
AI算法与图像处理
2021/09/06
3.1K0
使用 OpenCV 对图像进行特征检测、描述和匹配
OpenCV项目(20)|Blob找坏点
应用: 五种方式将镜子中的“污点”的准 确位置找出来,并确定其大小、形状及面积。 代码: #include <opencv2/core.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/highgui.hpp> #include <opencv2/features2d.hpp> #include <vector> #include <map> #include <iostream> using namespace std; using names
用户9831583
2022/06/16
4160
OpenCV项目(20)|Blob找坏点
OpenCV4.5.x 中SIFT特征匹配调用演示
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 OpenCV4.4版本以后已经把SIFT跟SURF特征提取又重新get回来了,可以不需要编译OpenCV源码,直接下载官方预编译版本的就可以直接使用了。但是很多人还以为必须要编译源码才能使用SIFT特征检测的函数!如果还不知道SIFT特征是什么,就看这里的这篇文章就好啦。 OpenCV SIFT特征算法详解与使用 01 创建SIFT特征提取器 下面就来验证一下是否真的可以了,请看步骤与过程,首先创建SIFT特征提取器
OpenCV学堂
2022/08/29
1.6K0
OpenCV4.5.x 中SIFT特征匹配调用演示
OpenCV中ORB特征提取与匹配
OpenCV中ORB特征提取与匹配 FAST特征点定位 ORB - (Oriented Fast and Rotated BRIEF)算法是基于FAST特征检测与BRIEF特征描述子匹配实现,相比BR
OpenCV学堂
2018/04/04
5.1K0
OpenCV中ORB特征提取与匹配
圆点点二维码的识别
如图所示,二维码由不规则的圆点阵列而成,用手机扫描也很难识别。 先进行图像预处理,再识别出斑点: 根据斑点的相对位置生成方阵: 最后填充边界并放大后保存图像,给zxing模块(python调用java)识别。 识别结果如下: 附上源代码: import cv2 import numpy as np from matplotlib import pyplot as plt from PIL import Image import zxing # 导入解析包 class BlobDetector(object
用户6021899
2020/06/22
4.6K1
OpenCV 轮廓检测
http://blog.sina.com.cn/s/blog_8fc98fe501017ypb.html
流川疯
2022/11/29
9020
OpenCV 轮廓检测
OpenCV中几何形状识别与测量
OpenCV中几何形状识别与测量 ---- 写有代码的文章、做有情怀的人 ---- 经常看到有学习OpenCV不久的人提问,如何识别一些简单的几何形状与它们的颜色,其实通过OpenCV的轮廓发现与几何分析相关的函数,只需不到100行的代码就可以很好的实现这些简单几何形状识别与对象测量相关操作。本文就会演示给大家如何通过OpenCV 轮廓发现与几何分析相关函数实现如下功能: 几何形状识别(识别三角形、四边形/矩形、多边形、圆) 计算几何形状面积与周长、中心位置 提取几何形状的颜色 在具体代码实现与程序演示之前
OpenCV学堂
2018/04/18
7.6K0
OpenCV中几何形状识别与测量
历时七个月整理出来的《OpenCV4系统化学习路线图》
OpenCV4.0发布以来,其依靠良好的接口代码、系统级别的优化、更加通用易学的函数调用,集成OpenVINO与tensorflow、caffe等模型加速推断、实现了从传统的图像处理到基于深度学习的视觉处理路线图的完整拓展。OpenCV4 毫无疑问是一个OpenCV发展历史的一个重要里程碑之作。官方的宣传口号是 OpenCV4 is more than OpenCV 充分说明OpenCV4 是整合深度学习的新一代计算机视觉开发框架!
AI算法与图像处理
2019/08/20
2.6K0
历时七个月整理出来的《OpenCV4系统化学习路线图》
VC++中使用OpenCV进行形状和轮廓检测
在VC++中使用OpenCV进行形状和轮廓检测,轮廓是形状分析以及物体检测和识别的有用工具。如下面的图像中Shapes.png中有三角形、矩形、正方形、圆形等,我们如何去区分不同的形状,并且根据轮廓进行检测呢?
ccf19881030
2024/05/24
6260
VC++中使用OpenCV进行形状和轮廓检测
Python OpenCV4趣味应用系列(八)---基于SimpleBlobDetector识别骰子点数
Blob是图像中一组相连的像素,它们具有一些共同的属性(例如灰度值),Blob检测的目的是识别并标记这些区域。OpenCV提供了一种方便的方法来检测blob并可以根据不同特征对其进行过滤,它就是SimpleBlobDetector,让我们看一个简单的例子:
Color Space
2020/01/13
4.4K0
Python OpenCV4趣味应用系列(八)---基于SimpleBlobDetector识别骰子点数
计算机视觉 OpenCV Android | 特征检测与匹配 之 Feature2D中的检测器与描述子
前面提到的SURF与SIFT特征检测器与描述子, 其实都是OpenCV扩展模块xfeature2d中的内容, 而在OpenCV本身包含的feature2d模块中也包含了几个非常有用的特征检测器与描述子, 其所支持的特征点检测器(FeatureDetector)如下:
凌川江雪
2019/03/04
2.1K0
OpenCV 3.1.0中特征检测与描述算法接口改动
OpenCV从 2.4.x升级到3.x中有很多代码重构和性能提高,还有API接口的整合,以Feature2D及其扩展模块的特征检测与描述为例,在OpenCV2.4.x中可以通过FeatureDetec
OpenCV学堂
2018/04/04
1.4K0
OpenCV 3.1.0中特征检测与描述算法接口改动
特征提取——局部特征-SIFT算法尺度不变性的理解
不管原图尺度是多少,在包含了所有尺度的尺度空间下都能找到那些稳定的极值点,这样就做到了尺度不变!
AomanHao
2022/01/14
1.2K0
OpenCV | 二值图像分析的技巧都在这里
二值图像分析最常见的一个主要方式就是轮廓发现与轮廓分析,其中轮廓发现的目的是为轮廓分析做准备,经过轮廓分析我们可以得到轮廓各种有用的属性信息、常见的如下:
OpenCV学堂
2020/02/21
1.9K0
高翔Slambook第七讲代码解读(特征点提取)
作为一个视觉SLAM的入门学徒,高翔的书我看了一遍,视频也跟了一遍,代码在自己的电脑上也跑过,但总觉得跟啥都没学没有太大区别。
小白学视觉
2019/10/24
1.5K0
OpenCV4.4 中SIFT特征匹配调用演示
大家好,听说OpenCV4.4 已经把SIFT跟SURF特征提取又重新get回来了,可以不需要编译OpenCV源码,直接下载官方预编译版本的就可以直接使用了。如果你还不知道SIFT特征是什么,就看这里的这篇文章就好啦。
OpenCV学堂
2020/08/06
3.1K0
OpenCV2 计算机视觉应用编程秘籍:6~10
滤波是信号和图像处理的基本任务之一。 它是一个过程,旨在有选择地提取图像的某些方面,这些方面被认为在给定应用的上下文中传达了重要信息。 过滤可以消除图像中的噪点,提取有趣的视觉特征,允许图像重采样等。 它起源于一般的信号和系统理论。 在此我们将不详细介绍该理论。 但是,本章将介绍一些与过滤有关的重要概念,并说明如何在图像处理应用中使用过滤器。 但首先,让我们先简要介绍一下频域分析的概念。
ApacheCN_飞龙
2023/04/27
1.2K0
matlab中Regionprops函数详解——度量图像区域属性
声明:原文链接https://blog.csdn.net/langb2014/article/details/49886787点击打开链接,仅学习使用,写的很不错。
全栈程序员站长
2022/11/17
2.2K0
matlab中Regionprops函数详解——度量图像区域属性
相关推荐
OpenCV 斑点检测
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验