opencv官网 Blob检测

参考: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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

七大 排序算法(一篇文章梳理)

一、引言 排序算法是计算机科学中不可或缺的一部分&#xff0c;它们在数据处理、数据库管理、搜索引擎、数据分析等多个领域都有广泛的应用。排序算法的主要任务是将一组数据元素按照某种特定的顺序&#xff08;如升序或降序&#xff09;进行排列。本文将对一些常见的排序算法…

内存安全的编程语言

美国政府新颁布《回归基础构件&#xff1a;通往安全软件之路》 《回归基础构件&#xff1a;通往安全软件之路》中&#xff0c;白宫国家网络主任办公室&#xff08;ONCD&#xff09;呼吁开发者使用「内存安全的编程语言」 内存安全的编程语言 根据NSA的建议&#xff0c;内存…

Jenkins设置使用163邮箱发送邮件

目录 一、下载需要的插件 二、开通163邮箱的SMTP服务 三、配置邮箱&#xff0c;测试发送 1、配置Jenkins Location 2、配置Extended E-mail Notification 扩展邮件通知 3、配置默认触发器&#xff08;可先不配置&#xff09; ​编辑 4、配置默认的邮件通知 5、测试邮箱…

Jenkins发送邮件、定时执行、持续部署

集成Allure报告只需要配置构建后操作即可。但如果是web自动化&#xff0c;或是用HTMLTestRunner生成报告&#xff0c;构建后操作要选择Publish HTML reports&#xff0c;而构建中还要添加Execute system Groovy script插件&#xff0c;内容&#xff1a; System.setProperty(&q…

VMvare17安装centos8安装宝塔面板 教程

阿里镜像站&#xff1a;https://mirrors.aliyun.com/centos centos-8-isos-x86_64安装包下载_开源镜像站-阿里云 https://mirrors.aliyun.com/centos/8/isos/x86_64/CentOS-8.5.2111-x86_64-dvd1.iso 将上面的链接复制到迅雷进行高速下载 vmvare安装配置教程安装教程 CentOS…

MySQL学习笔记(一)数据库事务隔离级别与多版本并发控制(MVCC)

一、数据库事务隔离级别 数据库事务的隔离级别有4种&#xff0c;由低到高分别为Read uncommitted &#xff08;读未提交&#xff09;、Read committed&#xff08;读提交&#xff09; 、Repeatable read&#xff08;可重复读&#xff09; 、Serializable &#xff08;串行化&a…

爬虫学习笔记-requests爬取NBA得分榜

1.导入requests库,用于请求获取URL位置的资源 import requests 2.导入lxml库,解析及生成xml和html文件 from lxml import etree 3.定义发送请求的地址 url https://nba.hupu.com/stats/players 4.定义请求头 headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64…

机器学习-面经(part6、集成学习)

10 集成学习 定义:通过结合多个学习器(例如同种算法但是参数不同,或者不同算法),一般会获得比任意单个学习器都要好的性能,尤其是在这些学习器都是"弱学习器"的时候提升效果会很明显。 10.1 Boosting(提升法) 可以用于回归和分类 问题,它每一…

Zabbix监控容器MongoDB,报错:Unknown metric mongodb.server.status

在Zabbix中配置监控MongoDB容器时&#xff0c;如果遇到Unknown metric mongodb.server.status这样的错误&#xff0c;通常意味着Zabbix Agent尝试从MongoDB获取某个预定义的性能指标&#xff08;例如mongodb.server.status&#xff09;&#xff0c;但是未能成功识别或解析该指标…

政安晨【TypeScript高级用法】(四):模块与声明文件

TypeScript是一种静态类型的JavaScript超集语言&#xff0c;它支持模块化开发和声明文件。 模块化开发是一种将代码分割为独立的模块&#xff0c;每个模块只关注自己的功能&#xff0c;然后通过导入和导出来实现模块之间的交互和复用。在TypeScript中&#xff0c;可以使用impo…

Day18:信息打点-小程序应用解包反编译动态调试抓包静态分析源码架构

目录 小程序获取-各大平台&关键字搜索 小程序体验-凡科建站&模版测试上线 小程序抓包-Proxifier&BurpSuite联动 小程序逆向-解包反编译&动态调试&架构 思维导图 章节知识点 Web&#xff1a;语言/CMS/中间件/数据库/系统/WAF等 系统&#xff1a;操作系…

第十五届蓝桥杯青少组STEMA测评SPIKE初级真题试卷 2024年1月

第十五届蓝桥杯青少组STEMA测评SPIKE初级真题试卷 2024年1月 ​​​​​​​ 来自&#xff1a;6547网 http://www.6547.cn/doc/vywur8eics

hive实战项目:旅游集市数仓建设

旅游集市数仓建设 文章目录 旅游集市数仓建设为什么要设计数据分层&#xff1f;分层设计ODS&#xff08;Operational Data Store&#xff09;&#xff1a;数据运营层DW&#xff08;Data Warehouse&#xff09;&#xff1a;数据仓库层DWD&#xff08;Data Warehouse Detail&…

Neo4j 新手教程 环境安装 基础增删改查 python链接 常用操作 纯新手向

Neo4j安装教程&#x1f680; 目前在学习知识图谱的相关内容&#xff0c;在图数据库中最有名的就是Neo4j,为了降低入门难度&#xff0c;不被网上很多华丽呼哨的Cypher命令吓退&#xff0c;故分享出该文档&#xff0c;为自己手动总结&#xff0c;包括安装环境&#xff0c;增删改查…

PRewrite: Prompt Rewriting with Reinforcement Learning

PRewrite: Prompt Rewriting with Reinforcement Learning 基本信息 2024-01谷歌团队提交到arXiv 博客贡献人 徐宁 作者 Weize Kong&#xff0c;Spurthi Amba Hombaiah&#xff0c;Mingyang Zhang 摘要 工程化的启发式编写对于LLM&#xff08;大型语言模型&#xff09;应…

LeNet5实战——衣服分类

搭建模型训练代码&#xff08;数据处理、模型训练、性能指标&#xff09;——> 产生权重w ——>模型结构c、w测试 配置环境 Pycharm刚配置的环境找不到了-CSDN博客 model.py 导入库 import torch from torch import nn from torchsummary import summary 模型搭…

三步骤找到用户真正痛点 提高需求分析质量

用户痛点对于需求分析具有至关重要的作用&#xff0c;这直接关系着需求分析结果是否真正满足用户需求&#xff0c;关系着最终研发的产品是否能够满足市场的需求&#xff0c;是否能够在竞争激烈的市场中脱颖而出。因此找到用户真正痛点至关重要。 1、什么是痛点 痛点是消费者心理…

Unity2013.1.19_DOTS_Burst compiler

Unity2013.1.19_DOTS_Burst compiler DOTS是一种新产品&#xff0c;现在尚在起步阶段。由于它处于持续发展中&#xff0c;随着我们努力使其达到最佳状态&#xff0c;您将看到API会不断演变和日趋成熟。 DOTS包含以下元素&#xff1a; 实体组件系统(ECS) - 提供使用面向数据的…

Linux下下载安装JDK配置Java环境变量

Linux下下载安装JDK配置Java环境变量 1. 下载JDK 下载链接&#xff1a;(https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) 2. 上传至服务器并解压 可通过shell工具进行上传&#xff0c;我这里是上传安装在/opt目录 解压jdk-17.0.10_linux-x64_b…

【DevOps云实践】不同Azure Function的类型

【DevOps云实践】不同Azure Function的类型 Azure函数是由Microsoft Azure提供的无服务器计算服务,允许开发人员构建和部署应用程序而不必担心底层基础设施。使用Azure函数,您可以根据不同的触发器执行代码,并支持多种类型的函数以满足不同的用例。在本博客文章中,我们将探…