ubuntu22.04@laptop OpenCV Get Started: 010_blob_detection

ubuntu22.04@laptop OpenCV Get Started: 010_blob_detection

  • 1. 源由
  • 2. blob应用Demo
    • 2.1 C++应用Demo
    • 2.2 Python应用Demo
  • 3. 重点分析
    • 3.1 Threshold
    • 3.2 Area
    • 3.3 Circularity
    • 3.4 Convexity
    • 3.5 Inertia Ratio
  • 4. 总结
  • 5. 参考资料
  • 6. 补充

1. 源由

Blob是图像中的一组连接像素,它们共享一些共同特性(例如灰度值)。

在下图中,暗连接区域是斑点,斑点检测旨在识别和标记这些区域。

在这里插入图片描述

OpenCV提供了一种基于不同特征检测和过滤斑点的简单方法。

2. blob应用Demo

010_blob_detection是OpenCV通过设置blob参数过滤图像的示例程序。

2.1 C++应用Demo

C++应用Demo工程结构:

010_blob_detection/CPP$ tree . -L 1
.
├── blob.cpp
├── blob.jpg
└── CMakeLists.txt0 directories, 3 files

确认OpenCV安装路径:

$ find /home/daniel/ -name "OpenCVConfig.cmake"
/home/daniel/OpenCV/installation/opencv-4.9.0/lib/cmake/opencv4/
/home/daniel/OpenCV/opencv/build/OpenCVConfig.cmake
/home/daniel/OpenCV/opencv/build/unix-install/OpenCVConfig.cmake$ export OpenCV_DIR=/home/daniel/OpenCV/installation/opencv-4.9.0/lib/cmake/opencv4/

C++应用Demo工程编译执行:

$ mkdir build
$ cd build
$ cmake ..
$ cmake --build . --config Release
$ cd ..
$ ./build/blob

2.2 Python应用Demo

Python应用Demo工程结构:

010_blob_detection/Python$ tree . -L 1
.
├── blob.jpg
└── blob.py0 directories, 2 files

Python应用Demo工程执行:

$ workoncv-4.9.0
$ python blob.py

3. 重点分析

下面是通过params过滤以后,显示blob的代码:

C++:

	// Storage for blobsvector<KeyPoint> keypoints;#if CV_MAJOR_VERSION < 3   // If you are using OpenCV 2// Set up detector with paramsSimpleBlobDetector detector(params);// Detect blobsdetector.detect( im, keypoints);
#else // Set up detector with paramsPtr<SimpleBlobDetector> detector = SimpleBlobDetector::create(params);   // Detect blobsdetector->detect( im, keypoints);
#endif // Draw detected blobs as red circles.// DrawMatchesFlags::DRAW_RICH_KEYPOINTS flag ensures// the size of the circle corresponds to the size of blobMat im_with_keypoints;drawKeypoints( im, keypoints, im_with_keypoints, Scalar(0,0,255), DrawMatchesFlags::DRAW_RICH_KEYPOINTS );// Show blobsimshow("keypoints", im_with_keypoints );

Python:

# Create a detector with the parameters
ver = (cv2.__version__).split('.')
if int(ver[0]) < 3 :detector = cv2.SimpleBlobDetector(params)
else : detector = cv2.SimpleBlobDetector_create(params)# Detect blobs.
keypoints = detector.detect(im)# Draw detected blobs as red circles.
# cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS ensures
# the size of the circle corresponds to the size of blobim_with_keypoints = cv2.drawKeypoints(im, keypoints, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)# Show blobs
cv2.imshow("Keypoints", im_with_keypoints)

3.1 Threshold

采样值阈值过滤,在[minThreshold, maxThreshold]之间采用thresholdStep步进方式过滤。

C++:

// Change thresholds
params.minThreshold = 10;
params.maxThreshold = 200;

Python:

# Change thresholds
params.minThreshold = 10
params.maxThreshold = 200

3.2 Area

面积过滤,小于当前面积时,被过滤掉。

C++:

// Filter by Area.
params.filterByArea = true;
params.minArea = 1500;

Python:

# Filter by Area.
params.filterByArea = True
params.minArea = 1500

3.3 Circularity

圆形度过滤,低于阈值被过滤掉(越接近圆的时候,为1)。

在这里插入图片描述

C++:

// Filter by Circularity
params.filterByCircularity = true;
params.minCircularity = 0.1;

Python:

# Filter by Circularity
params.filterByCircularity = True
params.minCircularity = 0.1

3.4 Convexity

blob面积和凸包的面积之比(不凹陷的图形该值为1),因此,凸包越厉害越接近0。

C++:

// Filter by Convexity
params.filterByConvexity = true;
params.minConvexity = 0.87;

Python:

# Filter by Convexity
params.filterByConvexity = True
params.minConvexity = 0.87

3.5 Inertia Ratio

惯性率,通常圆(1),椭圆(0, 1),过滤惯性率小于该值的物体。

C++:

// Filter by Inertia
params.filterByInertia = true;
params.minInertiaRatio = 0.01;

Python:

# Filter by Inertia
params.filterByInertia = True
params.minInertiaRatio = 0.01

4. 总结

本文通过对图像进行SimpleBlobDetector操作,从而对blob物体进行过滤,主要目的是理解该对象(SimpleBlobDetector)参数的含义。

  • detect(images,keypoints))
  • images Image set.
  • keypoints The detected keypoints. In the second variant of the method keypoints[i] is a set of keypoints detected in images[i] .

5. 参考资料

【1】ubuntu22.04@laptop OpenCV Get Started
【2】ubuntu22.04@laptop OpenCV安装
【3】ubuntu22.04@laptop OpenCV定制化安装

6. 补充

学习是一种过程,对于前面章节学习讨论过的,就不在文中重复了。

有兴趣了解更多的朋友,请从《ubuntu22.04@laptop OpenCV Get Started》开始,一个章节一个章节的了解,循序渐进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/683920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go教程-Go语言简介

这篇文章我们来聊聊Go语言。 Go语言发展历史 以下是Go语言发展的几个里程碑节点&#xff1a; Go一开始是Google内部的一个项目&#xff0c;由三位大佬Rob Pike、Robert Griesemer、Ken Thompson早2007年发起。在2009年11月&#xff0c;Go语言正式对外开源。在2010年&#xf…

Java中的String类的常用方法(对于字符串的常用操作)

目录 一、获取指定索引的字符 二、 获取指定字符或者字符串的索引位置 三、判断字符串是否以指定内容开头或结尾 四、替换指定的字符或者是字符串 五、获取字符串的子串 六、将字符串转换为字符数组 七、比较字符串的内容是否相等 八、连接字符串 九、比较两个字符串的大…

2024-02-16 AIGC-数字人-硅基DUIX-记录

摘要: 2024-02-16 AIGC-数字人-硅基DUIX-记录 文档: https://duix.guiji.ai/duix-website/localHuman Digital Humans (guiji.ai) 文档中心 (guiji.ai) DUIX本地渲染SDK安卓集成文档_v1 | 文档中心 (guiji.ai) 本地化部署duix说明: 将DUIX离线部署到本地并在本地生成数字人需要…

ESP32学习(3)——连接WIFI

1.简介 Wi-Fi是基于IEEE 802.11标准的无线网络技术 让联网设备以无线电波的形式&#xff0c;加入采用TCP/IP通信协议的网络. Wi-Fi设备有两种模式&#xff1a; 1.Access Point(AP) 模式&#xff0c;此为无线接入点&#xff0c;家里的光猫就是结合WiFi和internet路由功能的AP。…

【Java程序员面试专栏 分布式中间件】Redis 核心面试指引

关于Redis部分的核心知识进行一网打尽,包括Redis的基本概念,基本架构,工作流程,存储机制等,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 基础概念 明确redis的特性、应用场景和数据结构 什么是Redis,Redis有哪些应用场景 Redi…

【十九】【C++】 priority_queue简单使用和仿函数

priority_queue文档介绍翻译 优先队列是一种容器适配器&#xff0c;专门设计成其中的第一个元素始终是根据某种严格的弱排序准则最大的元素。 这种上下文类似于堆&#xff0c;其中元素可以在任何时刻插入&#xff0c;而只能检索最大堆元素&#xff08;在优先队列中顶部的元素&a…

Stable Diffusion系列(五):原理剖析——从文字到图片的神奇魔法(扩散篇)

文章目录 DDPM论文整体原理前向扩散过程反向扩散过程模型训练过程模型生成过程概率分布视角参数模型设置论文结果分析 要想完成SD中从文字到图片的操作&#xff0c;必须要做到两步&#xff0c;第一步是理解文字输入包含的语义&#xff0c;第二步是利用语义引导图片的生成。下面…

【Java基础题型】力扣88、合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 (要合并到的目标数组)中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&a…

使用redis实现手机短信验证码和lua完成重置功能

文章目录 前言一、介绍二、代码1.LoginController2.reset.lua 总结 前言 2024了,各种各样的门户网站和APP都需要登录,登录方式也各种各样,由于都要绑定用户手机号码,所以大部分都支持了手机验证码登录的方式,接下来我们使用redis来完成验证码的功能。 一、介绍 方法名描述get…

深度学习入门-第2章-感知机

感知机&#xff08;perceptron&#xff09; 严格地讲&#xff0c;本章中所说的感知机应该称为“人工神经元”或“朴素感知机”&#xff0c;但是因为很多基本的处理都是共通的&#xff0c;所以这里就简单地称为“感知机”。2.1 感知机是什么 感知机接收多个输入信号&#xff0c…

Uipath 实现Excel 文件合并

场景描述 某文件夹下有多个相同结构(标题列相同)的Excel 文件&#xff0c;需实现汇总到一个Excel文件。 常见场景有销售明细汇总&#xff0c;订单汇总等。 解决方案 对于非IT 人员则可使用Uipath 新式Excel活动&#xff0c;通过拖拉实现。也可以通过内存表或使用VB脚本&…

解锁机器学习多类分类之门:Softmax函数的全面指南

1. 引言 Softmax函数的定义和基本概念 Softmax函数&#xff0c;也称为归一化指数函数&#xff0c;是一个将向量映射到另一个向量的函数&#xff0c;其中输出向量的元素值代表了一个概率分布。在机器学习中&#xff0c;特别是在处理多类分类问题时&#xff0c;Softmax函数扮演…

寒假学习记录17:包管理器(包管理工具)

概念 包&#xff08;package&#xff09; 包含元数据的库&#xff0c;这些元数据包括&#xff1a;名称&#xff0c;描述&#xff0c;git主页&#xff0c;许可证协议&#xff0c;作者&#xff0c;依赖..... 库&#xff08;library&#xff0c;简称lib&#xff09; 以一个或多个模…

第11讲投票创建后端实现

投票创建页面实现 文件选择上传组件 uni-file-picker 扩展组件 安装 https://ext.dcloud.net.cn/plugin?nameuni-file-picker 日期选择器uni-datetime-picker组件 安装 https://ext.dcloud.net.cn/plugin?nameuni-datetime-picker iconfont小图标 https://www.iconfont…

【教3妹学编程-算法题】子集中元素的最大数量

2哥 : 3妹&#xff0c;今年过年收到压岁钱了没呢。 3妹&#xff1a;切&#xff0c;我都多大了啊&#xff0c;肯定没收了啊 2哥 : 俺也一样&#xff0c;不仅没收到&#xff0c;小侄子小外甥都得给&#xff0c;还倒贴好几千 3妹&#xff1a;哈哈哈哈&#xff0c;2叔叔&#xff0c…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Navigation组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Navigation组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Navigation组件 鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#…

Java:性能优化细节01-10

Java&#xff1a;性能优化细节01-10 在Java程序开发过程中&#xff0c;性能优化是一个重要的考虑因素。常见的误解是将性能问题归咎于Java语言本身&#xff0c;然而实际上&#xff0c;性能瓶颈更多地源于程序设计和代码实现方式的不当。因此&#xff0c;培养良好的编码习惯不仅…

(力扣记录)235. 二叉搜索树的最近公共祖先

数据结构&#xff1a;树&#x1f332; 时间复杂度&#xff1a;O(n) 空间复杂度&#xff1a;O(1) 代码实现&#xff1a; class Solution:def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:while True:if p.val < root.val <…

数据的艺术与保障:深入探索OSI模型的表示层

引言 在现代计算机网络中&#xff0c;数据的传输和交换是至关重要的。为了促进不同计算机系统之间的有效通信&#xff0c;国际标准化组织&#xff08;ISO&#xff09;提出了开放系统互连&#xff08;OSI&#xff09;参考模型。该模型定义了网络通信的七个层次&#xff0c;每一…

Python中多种生成随机密码超实用实例

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。 前言 密码是信息安全的基石&#xff0c;它用于保护我们的账户、数据和隐私。为了确保密码足够强大&#xff0c;…