opencv官网 Blob检测

news2024/11/16 5:50:23

参考:Blob Detection Using OpenCV ( Python, C++ )

Bolob检测

在这里插入图片描述
Blob 是图像中一组连接的像素,它们共享一些共同属性(例如,灰度值)。在上图中,深色连接区域是 Blob,Blob 检测旨在识别和标记这些区域。

Blob detection 是一种在图像中检测和识别连通区域(blob)的方法。用于检测图像中的斑点或目标区域的方法,它可以识别具有特定属性(如颜色、大小、形状等)的连通区域

可以使用 SimpleBlobDetector 类来实现

参数:

颜色:
首先,你需要将filterByColor设置为1。将blobColor设为0以选择较暗的Blob,设为255则选择较亮的Blob。基于大小:你可以通过设定参数filterByArea为1,并设置合适的minArea和maxArea值,从而根据Blob的大小进行过滤。例如,将minArea设为100,则会过滤掉所有像素面积小于100的Blob。

Circularity 形状:
圆度: 这个参数衡量的是Blob接近圆形的程度。例如,一个规则六边形的圆度比正方形更高。

Convexity 凸性:

Inertia Ratio :衡量一个形状的拉伸程度的。例如,对于一个圆形,这个值是1;对于一个椭圆,其值介于0和1之间;而对于一条线段,其值为0。

设置参数:

 # Read image
im = cv2.imread(r'E:\BlobTest.jpg', cv2.IMREAD_GRAYSCALE)
# Setup SimpleBlobDetector parameters.
params = cv2.SimpleBlobDetector_Params()

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

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

# Filter by Circularity 与⚪相近 比如八边形
params.filterByCircularity = True
params.minCircularity = 0.1

# Filter by Convexity 有缺口的圆
params.filterByConvexity = True
params.minConvexity = 0.87

# Filter by Inertia 检测到椭圆
# params.filterByInertia = True
# params.minInertiaRatio = 0.01

# 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)
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 blob
im_with_keypoints = cv2.drawKeypoints(im, keypoints, np.array([]), (0, 0, 255),
                                      cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)



# 输出关键点位置
if len(keypoints) > 0:
    for kp in keypoints:
        print(kp.pt)

在这里插入图片描述

al_filter = cv2.bilateralFilter(src=image, d=9, sigmaColor=75, sigmaSpace=75)

# Read image
src = cv2.imread("E://threshold.png", cv2.IMREAD_GRAYSCALE)

# Basic threhold example
th, dst = cv2.threshold(src, 0, 255, cv2.THRESH_BINARY)
cv2.imwrite("opencv-threshold-example.jpg", dst)

# Thresholding with maxValue set to 128
th, dst = cv2.threshold(src, 0, 128, cv2.THRESH_BINARY)
cv2.imwrite("opencv-thresh-binary-maxval.jpg", dst)

# Thresholding with threshold value set 127
th, dst = cv2.threshold(src, 127, 255, cv2.THRESH_BINARY)
cv2.imwrite("opencv-thresh-binary.jpg", dst)

# Thresholding using THRESH_BINARY_INV
th, dst = cv2.threshold(src, 127, 255, cv2.THRESH_BINARY_INV)
cv2.imwrite("opencv-thresh-binary-inv.jpg", dst)

# Thresholding using THRESH_TRUNC
th, dst = cv2.threshold(src, 127, 255, cv2.THRESH_TRUNC)
cv2.imwrite("opencv-thresh-trunc.jpg", dst)

# Thresholding using THRESH_TOZERO
th, dst = cv2.threshold(src, 127, 255, cv2.THRESH_TOZERO)
cv2.imwrite("opencv-thresh-tozero.jpg", dst)

# Thresholding using THRESH_TOZERO_INV
th, dst = cv2.threshold(src, 127, 255, cv2.THRESH_TOZERO_INV)
cv2.imwrite("opencv-thresh-to-zero-inv.jpg", dst)

# Set up the detector with default parameters.
detector = cv2.SimpleBlobDetector()

# Read image
im = cv2.imread(r'E:\BlobTest.jpg', cv2.IMREAD_GRAYSCALE)
# Setup SimpleBlobDetector parameters.
params = cv2.SimpleBlobDetector_Params()

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

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

# Filter by Circularity 与⚪相近 比如八边形
params.filterByCircularity = True
params.minCircularity = 0.1

# Filter by Convexity 有缺口的圆
params.filterByConvexity = True
params.minConvexity = 0.87

# Filter by Inertia 检测到椭圆
# params.filterByInertia = True
# params.minInertiaRatio = 0.01

# 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)
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 blob
im_with_keypoints = cv2.drawKeypoints(im, keypoints, np.array([]), (0, 0, 255),
                                      cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

cv_show(im_with_keypoints)

# 输出关键点位置
if len(keypoints) > 0:
    for kp in keypoints:
        print(kp.pt)

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

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

相关文章

基于51单片机风速仪风速测量台风预警数码管显示

基于51单片机风速仪风速测量报警数码管显示 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真4. 程序代码5. 设计报告6. 设计资料内容清单&&下载链接资料下载链接&#xff1a; 基于51单片机风速仪风速测量报警数码管显示( proteus仿真程序设计报告讲解视频&…

CRM客户体验建设三剑客:构建旅程的必备策略

在企业越来越重视客户体验的今天&#xff0c;客户体验建设包含客户认知、客户旅程设置、NPS客户满意度调查三大版块&#xff0c;在工具上分别对应Zoho CRM的路径探查器、旅程构建器和NPS。上期介绍了路径探查器的作用和价值&#xff0c;本文将围绕客户旅程构建展开&#xff0c;…

Vue 3的Composition API和vue2的不同之处

Vue 3的Composition API是Vue.js框架的一个重要更新&#xff0c;它提供了一种新的组件逻辑组织和复用方式。在Vue 2中&#xff0c;我们通常使用Options API&#xff08;data、methods、computed等&#xff09;来组织组件的逻辑&#xff0c;但这种组织方式在处理复杂组件时可能会…

前端面试题 ===> 【JavaScript - 高级】

公众号&#xff1a;需要以下pdf&#xff0c;关注下方 2023已经过完了&#xff0c;让我们来把今年的面试题统计号&#xff0c;来备战今年的金三银四&#xff01;所以&#xff0c;不管你是社招还是校招&#xff0c;下面这份前端面试工程师高频面试题&#xff0c;请收好。 JavaScr…

LED照明恒流驱动芯片特点解析与SM16306推荐

LED恒流驱动芯片 是一种电子芯片&#xff0c;用于控制和驱动LED灯&#xff0c;以保持电流恒定&#xff0c;从而使LED灯能够稳定工作。这种芯片具有多种功能&#xff0c;包括电源管理、过流保护和温度调节等。 在LED照明系统中&#xff0c;恒流驱动芯片是非常重要的组成部分。由…

32单片机基础:TIM输入捕获

指定的电平跳变&#xff0c;就是上升沿或者下降沿&#xff0c;可以通过程序设置 PWMI模式&#xff0c;就是PWM的输入模式&#xff0c;是专门为测量PWM频率和占空比设计的&#xff0c; 可配合主从触发模式 这两个功能结合起来&#xff0c;测量频率占空比就是硬件全自动运行的…

奥维云网权威发布 智能水洗集成灶是第四代集成灶

近日&#xff0c;奥维云网权威发布了《2024智能水洗蒸烤集成灶行业发展趋势白皮书》&#xff0c;自此&#xff0c;集成灶行业产品正式进入4.0水洗蒸烤时代&#xff01; 冠军实力助力行业迭新换代 据《2024智能水洗蒸烤集成灶行业发展趋势白皮书》分析&#xff0c;国内集成灶产…

【Linux实践室】Linux常用命令

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;Linux文件操作2.1.1 &#x1f47b;创建文件2…

Java对接快递100实时快递单号查询API接口

目录 1.引入依赖 2.定义配置信息 3.模块结构 4.Controller 5.Service实现类 6.返回数据dto以及dto中的数据dto 7.测试运行 今天也是接到了这个任务&#xff0c;官网有小demo&#xff0c;可以下载下来参考test中代码 官方文档地址&#xff1a; 实时快递查询接口技术文档…

探索Python编程世界:从入门到精通

一.Python 从入门到精通 随着计算机科学的发展&#xff0c;编程已经成为了一种必备的技能。而 Python 作为一种简单易学、功能强大的编程语言&#xff0c;越来越受到人们的喜爱。本文将为初学者介绍 Python 编程的基础知识&#xff0c;帮助他们踏入 Python 编程的大门&#xf…

Nexus Repository的搭建

一、前言 Nexus Repository用于管理maven的jar包。java开发程序员每天都在使用&#xff0c;但是自己搭建或者管理的就很少。除非你是系统架构师。因为这一套东西&#xff0c;基本是搭建一次就不需要人来搭建了&#xff0c;日后打开界面维护的机会也很少&#xff0c;我们只需要…

【QT】在窗口中添加按钮

在窗口中添加按钮 创建一个QT程序&#xff0c;首先要做什么&#xff1f; 先创建一个应用程序类创建一个窗口类 在窗口中添加按钮 添加头文件&#xff1a;#include 没有设置按钮标题的函数&#xff0c;是因为它继承了父类&#xff0c;设置标题的函数在父类中。 因为好多子类…

低代码平台开发——基于React(文末送书)

目录 小程一言适用对象本书达成 书籍介绍作者简介内容介绍书籍目录阅读指导 小程送书 小程一言 《低代码平台开发——基于React》这本书主要围绕低代码平台和React技术的结合展开&#xff0c;为读者提供了关于低代码平台开发的理论和实践知识。 ## 书中内容简介 书中内容分为…

[前端][死循环]问题发现[easyui]

文章目录 问题描述问题细节 解决思路综合分析 解决办法 问题描述 页面点击按钮跳转弹窗页面回显出数据 此弹窗页面中有年份&#xff0c;类型等&#xff0c;当选中年份/类型会重新触发回显方法(onSelect 中调用方法)&#xff0c;回显对应年份/类型得数据 问题细节 最开始调试…

4G/5G执法记录仪、智能安全帽走国标GB28181接入海康、宇视等大平台,也可走平台与平台对接,以下级平台级联到上级大平台

AIoT万物智联&#xff0c;智能安全帽生产厂家&#xff0c;执法记录仪生产厂家&#xff0c;智能安全帽、智能头盔、头盔记录仪、执法记录仪、智能视频分析/边缘计算AI盒子、车载DVR/NVR、布控球、智能眼镜、智能手电、无人机4G补传系统等统一接入大型融合通信可视指挥调度平台VM…

RabbitMQ如何保证消息不丢

如何保证Queue消息能不丢呢&#xff1f; RabbitMQ在接收到消息后&#xff0c;默认并不会立即进行持久化&#xff0c;而是先把消息暂存在内存中&#xff0c;这时候如果MQ挂了&#xff0c;那么消息就会丢失。所以需要通过持久化机制来保证消息可以被持久化下来。 队列和交换机的…

WebGIS开发0基础必看教程:地图显示——通过行列号来换算出多种瓦片的URL之离线地图

1.前言 在前面我花了两个篇幅来讲解行列号的获取&#xff0c;也解释了为什么要获取行列号。在这一章&#xff0c;我将把常见的几种请求瓦片时的URL样式罗列出来&#xff0c;并且给出大致的解释。 我在这里将地图分为离线地图和在线地图。所谓离线地图&#xff0c;即保存在本地…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:文本通用)

文本通用属性目前只针对包含文本元素的组件&#xff0c;设置文本样式。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 属性 名称参数类型描述fontColorResourceColor设置字体颜色。 从API version 9开…

亚信安慧AntDB:数据库自主创新的缩影

AntDB作为一款自主研发的数据库系统&#xff0c;具备了国产化升级改造的核心能力。这款数据库系统通过不懈努力和持续探索&#xff0c;实现了从跟随他人到引领潮流的华丽转身。AntDB不仅仅是一种技术产品&#xff0c;更是体现了自主研发能力的缩影&#xff0c;体现了科技企业在…

动态规划:LeetCode第10题 正则表达式匹配

题目&#xff1a; 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c;是要涵盖 整个 字符串 s的&#xff0c;而不是部分字符串。 示例 1&#xff1a; …