python学opencv|读取图像(六十六)使用cv2.minEnclosingCircle函数实现图像轮廓圆形标注
【1】引言
前序学习过程中,已经掌握了使用cv2.boundingRect()函数实现图像轮廓矩形标注,相关文章链接为:python学opencv|读取图像(六十五)使用cv2.boundingRect()函数实现图像轮廓矩形标注-CSDN博客
这篇文章成功在图像上绘制出了矩形,在此基础上,如果想进一步绘制圆形标注,就需要调用cv2.minEnclosingCircle函数。
【2】官网教程
点击下方链接,直达cv2.minEnclosingCircle()函数的官网教程:
OpenCV: Structural Analysis and Shape Descriptors
官网对 cv2.minEnclosingCircle()函数的说明为:
图1 官网对 cv2.minEnclosingCircle()函数的说明
官网对 cv2.minEnclosingCircle()函数的参数说明为:
points:轮廓的数组,可以直接用轮廓来代表
center:返回值,最小的圆形的圆心;
radius:返回值,最小的圆形的半径。
【3】代码测试
和之前一样,cv2.minEnclosingCircle()函数要想用圆形作为标签标注图形的轮廓,需要提前知晓图像的轮廓位置,所以依然要调用 cv2.findContours()函数来找到轮廓。
cv2.minEnclosingCircle()函数和cv2.findContours()函数有一个共同点,就是必须要对灰度图像才有效,所以必须提前调用cv2.cvtColor()函数转换灰度图,而为了更进一步突出灰度图,有时候需要调用cv2.threshold()函数进行阈值处理。
如果对上述函数不熟悉,可以通过下述链接回忆:
python学opencv|读取图像(六十四)使用cv2.findContours()函数+cv2.drawContours()函数实现图像轮廓识别和标注-CSDN博客
python学opencv|读取图像(二十)使用cv2.circle()绘制圆形_python cv2.circle-CSDN博客
python学opencv|读取图像(十一)彩色图像转灰度图的两种办法_识别图像输出灰度图-CSDN博客
按照上述分析的逻辑,代码设置为:引入必要模块和图像,图像灰度处理,图像阈值处理,给灰度图像找边界轮廓,然后是绘制圆形标注。
此处直接给出完整代码:
import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片
src = cv.imread('df.png') #读取图像srcx.png
gray=cv.cvtColor(src,cv.COLOR_BGR2GRAY) #将图像转化为灰度图#图像处理
canvas = np.ones((580, 580, 3), np.uint8)*158 # 绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
t,dst=cv.threshold(gray,10,255,cv.THRESH_BINARY) #阈值处理
con,hierarchy=cv.findContours(dst,cv.RETR_LIST,cv.CHAIN_APPROX_SIMPLE) #读取边界
c,r=cv.minEnclosingCircle(con[0]) #获取第一轮廓的最小矩形边框,记录左上角坐标、宽和高
cx=int((c[0])) #取圆心x坐标
cy=int((c[1])) #取圆心y坐标
print('con=',len(con)) #输出con代表的轮廓列表数量
print('c=',c,'cx=',cx,'cy=',cy) #输出圆心
print('r=',r,'int(r)=',int(r)) #输出半径
print(src.shape) #输出src图像基本属性
cv.circle(src,(cx,cy),int(r),(200,100,255),5) #绘制圆形
#cv.imshow('ini-image ', dst) #显示原始图像
cv.imshow('ini-image-con', src) #显示带轮廓线图像
canvas=cv.circle(canvas,(cx,cy),int(r),(0,100,255),5)
cv.imshow('rectangle', canvas) # 在屏幕展示画线段的效果
#cv.imshow('ini-image-gon', gray) #显示带轮廓线图像
cv.imwrite('ini-image-con.png', src) #保存图像
cv.waitKey() # 图像不关闭
cv.destroyAllWindows() # 释放所有窗口
代码运行相关的图像为:
图2 初始图像
图3 圆形标注图像
由图2到图3可知,图像准确标注出了圆形。
【4】细节说明
在使用纯黑白图像时,顺利获得了如图3所示的矩形标注效果。
如果图像稍微复杂一些,是否效果依旧显著。
将输入图像更换为略复杂的图像:
图4 初始图像更换后
图5 实际运行效果-标注了一个点
由图5可见,实际运行效果只在人像上标注了一个点。
为此,追溯了原因,看读取的一些基本信息:
图6 基本信息
在控制台,获得了一些基本信息,con代表获得的轮廓数,第二行代表像素和通道。
显然,第二个初始图像读出了3285个轮廓,显然这个数据足够大,具体使用哪个轮廓来绘制圆形很难选择。
然后对于第一个初始图像,代码使用的轮廓为con[0],如果将其切换为con[1]:
src = cv.imread('df.png') #读取图像srcx.png
x,y,w,h=cv.boundingRect(con[1]) #获取第一轮廓的最小矩形边框,记录左上角坐标、宽和高
代码运行后的效果为:
图7 第二个矩形轮廓
由图7可见,如果使用第二个轮廓,绘制的圆形框在图像的边缘。
综上,使用cv2.minEnclosingCircle()函数对图像轮廓进行矩形标注,图像的颜色只要有黑白颜色才会更为准确。
【5】总结
掌握了python+opencv通过使用cv2.minEnclosingCircle()函数对图像轮廓进行圆形标注的技巧。
相关文章:
python学opencv|读取图像(六十六)使用cv2.minEnclosingCircle函数实现图像轮廓圆形标注
【1】引言 前序学习过程中,已经掌握了使用cv2.boundingRect()函数实现图像轮廓矩形标注,相关文章链接为:python学opencv|读取图像(六十五)使用cv2.boundingRect()函数实现图像轮廓矩形标注-CSDN博客 这篇文章成功在图…...
SpringCloud系列教程:微服务的未来(二十四)Direct交换机、Topic交换机、声明队列交换机
前言 在现代消息队列系统中,交换机是实现消息传递和路由的核心组件。本文将重点探讨三种常见的交换机类型:Direct交换机、Topic交换机和声明队列交换机。通过对这三种交换机的详细分析,我们将学习它们的工作原理、应用场景以及如何在实际项目…...
云创智城充电系统:基于 SpringCloud 的高可用、可扩展架构详解-多租户、多协议兼容、分账与互联互通功能实现
在新能源汽车越来越普及的今天,充电基础设施的管理和运营变得越来越重要。云创智城充电系统,就像一个超级智能管家,为新能源充电带来了全新的解决方案,让充电这件事变得更方便、更高效、更安全。 一、厉害的技术架构,让…...
iOS事件传递和响应
背景 对于身处中小公司且业务不怎么复杂的程序员来说,很多技术不常用,你可能看过很多遍也都大致了解,但是实际让你讲,不一定讲的清楚。你可能说,我以独当一面,应对自如了,但是技术的知识甚多&a…...
时间序列分析(四)——差分运算、延迟算子、AR(p)模型
此前篇章: 时间序列分析(一)——基础概念篇 时间序列分析(二)——平稳性检验 时间序列分析(三)——白噪声检验 一、差分运算 差分运算的定义:差分运算是一种将非平稳时间序列转换…...
OpenCV机器学习(6)朴素贝叶斯分类器(Naive Bayes Classifier)cv::ml::NormalBayesClassifier的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::ml::NormalBayesClassifier 是 OpenCV 机器学习模块中的一部分,用于实现朴素贝叶斯分类器(Naive Bayes Classifier&a…...
Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
目录 前言1. nginx配置2. 配置minio(Demo要点)3. 实战要点3.1 前端配置3.2 后端配置3.3 应用前言 如何在ruoyi-vue-pro上使用minio上传文件,通过Ngnix再次转发路径 相关的minio推荐阅读: 云服务器中的MinIO 配置 HTTPS 过程(图文)详细分析Java中的Minio类各API(附win配…...
python黑帽子第二版netcat分析
源码 import argparse import socket import shlex import subprocess import sys import textwrap import threadingdef execute(cmd):cmd cmd.strip()if not cmd:returnoutput subprocess.check_output(shlex.split(cmd), stderrsubprocess.STDOUT)return output.decode()…...
【Android开发】华为手机安装包安装失败“应用是非正式版发布版本,当前设备不支持安装”问题解决
问题描述 我们将Debug版本的安装包发送到手机上安装,会发现华为手机有如下情况 解决办法 在文件gradle.properties中粘贴代码: android.injected.testOnlyfalse 最后点击“Sync now”,等待重新加载gradle资源即可 后面我们重新编译Debug安装…...
dify实现分析-rag-文档内容提取
dify实现分析-rag-文档内容提取 概述 在文章《dify实现原理分析-上传文件创建知识库总体流程》中已经介绍了,文件上传后索引构建的总体流程,本文介绍其中的“Extract: 提取文档内容:这里会按段落或整页来获取文档内容”步骤的实现。 这一步的主要功能…...
腾讯云API+chatbox
腾讯云的限时免费接口:知识引擎原子能力 对话-原子能力相关接口-API 中心-腾讯云 本接口调用DeepSeek系列模型限时免费。即日至北京时间2025年2月25日23:59:59,所有腾讯云用户均可享受DeepSeek-V3、DeepSeek-R1模型限时免费服务,单账号限制接…...
sql查询null的时候
SELECT * FROM scm_sku_stock WHERE SKU_CODEGOS2310251620452226 and CONSIGNOR_USER_CODE is null 在 SQL 中,NULL 是一个特殊的值,表示“没有值”或“未知值”。在比较时,NULL 不能直接用 或 ! 来比较。相反,你需要使用 IS N…...
BitLocker技巧与经验
初级代码游戏的专栏介绍与文章目录-CSDN博客 BitLocker是windows默认的存储加密方案,用好了很安全,用错了完蛋。以下来自我的使用经验。 目录 可以加密移动设备 可以加密操作系统分区 TPM是个坑 一定要用微软账号登录并将密钥保存在账号里 不建议使…...
Electron 客户端心跳定时任务调度库调研文档 - Node.js 任务调度库技术调研文档
Electron 客户端心跳定时任务调度库调研文档 - Node.js 任务调度库技术调研文档 本文将对七个流行的定时任务调度库:node-cron、rxjs、bull、node-schedule、agenda、bree、cron。这些库都可以用来处理定时任务,但它们的特点和适用场景有所不同。我们将从…...
数据结构——二叉树(2025.2.12)
目录 一、树 1.定义 (1)树的构成 (2)度 2.二叉树 (1)定义 (2)二叉树的遍历 (3)遍历特性 二、练习 1.二叉树 (1)创建二叉树…...
OpenCV机器学习(5)逻辑回归算法cv::ml::LogisticRegression
OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::ml::LogisticRegression 是 OpenCV 机器学习模块中的一个类,用于实现逻辑回归算法。逻辑回归是一种广泛应用于分类问题的统计方法,特别适合二分类任务。…...
matlab 汽车abs的模糊pid和pid控制仿真
1、内容简介 matlab145-汽车abs的模糊pid和pid控制仿真 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略基于模糊控制的汽车ABS系统仿真研究_刘志敏.caj 汽车ABS模糊控制方法的分析与仿真_李林.caj 汽车ABS模糊控制方法的研究_王文竹.pdf 汽车ABS…...
Flutter 正在推进全新 PlatformView 实现 HCPP, 它又用到了 Android 上的什么黑科技
跨平台开发里的 PlatformView 实现一直是一个经久不衰的话题,在之前的 《深入 Flutter 和 Compose 的 PlatformView 实现对比》 我们就详细聊过 Flutter 和 Compose 在 PlatformView 实现上的异同之处,也聊到了 Compose 为什么在相同实现上对比 Flutter …...
VAS1260IB05E 集成内部开关驱动器的汽车级LED硬灯带高效解决方案
VAS1260IB05E LED芯片是一种连续模式电感降压转换器,设计用于从高于LED电压的电压源高效驱动单个或多个串联连接的LED。该设备在5V至60V之间的输入电源下工作,并提供高达1.2A的外部可调输出电流。包括输出开关和高侧输出电流感测电路,该电路使…...
5.【线性代数】—— 转置,置换和向量空间
五 转置,置换和向量空间 1. 置换矩阵2. 转置矩阵3. 对称矩阵4. 向量空间4.1 向量空间4.2 子空间 1. 置换矩阵 定义: 用于行互换的矩阵P。 之前进行ALU分解时,可能存在该行主元为0,要进行行互换,即PALU 性质࿱…...
前端如何实现一个五星评价,鼠标滑动,前边星星颜色的变黄,后边的不变;
直接上代码 <!DOCTYPE html> <html> <head> <style> .star-rating {display: flex;padding: 10px 0; }.star {position: relative;width: 40px;height: 40px; }.half {position: absolute;top: 0;width: 20px;height: 40px;overflow: hidden;font-siz…...
等差数列有几项--INT_MAX【#include <climits>】
等差数列 题目代码INT_MAX的使用 题目 代码 #include <iostream> #include <vector> #include <string> #include <algorithm> #include <math.h> #include <queue> #include <climits> // 包含INT_MAX常量 #include <cctype&g…...
Linux /dev/null
/dev/null 是 Linux 和类 Unix 系统中一个特殊且非常有用的设备文件,也被称为空设备。下面为你详细介绍它的特点、用途和使用示例。 特点 写入丢弃:当向 /dev/null 写入数据时,这些数据会被立即丢弃,不会被保存到任何地方&#…...
计算机视觉-尺度不变区域
一、尺度不变性 1.1 尺度不变性 找到一个函数,实现尺度的选择特性。 1.2 高斯偏导模版求边缘 1.3 高斯二阶导 用二阶过零点检测边缘 高斯二阶导有两个参数:方差和窗宽(给定方差可以算出窗宽) 当图像与二阶导高斯滤波核能匹配…...
串的基本操作--数据结构
目录 一、串的基本概述 二、串的存储结构 2.1定义属性存储结构 串长有两种表示方法: 1、用一个额外的变量length来存放串的长度; 2、串值后面加一个不计入串长的结束标记字符“\0”,此时的串长为隐含值。 2.2堆的顺序存储结构 三、串的基本操…...
C++17 数学特殊函数:探索标准库中的强大工具
文章目录 1. 什么是数学特殊函数?2. C17 中的特殊函数2.1 贝塞尔函数2.2 勒让德函数2.3 椭圆积分2.4 伽马函数2.5 误差函数 3. 实际应用场景3.1 科学计算3.2 工程应用3.3 数据分析 4. 总结 在 C17 中,标准库引入了一系列数学特殊函数,这些函数…...
多模态特征提取与融合助力高光谱+LiDAR数据分类性能飞跃
目录 论文解读 总体架构 CMIIE 模块工作模式 MLFFC模块工作模式 论文解读 提出了一种新的多模态特征提取模块CMIIE,可以捕获高光谱和LiDAR数据之间的互补信息。设计了一个多层特征融合分类模块MLFFC,通过对不同层级的特征进行融合来提高分类性能。使用对抗学习策略来指导网…...
内容中台重构企业内容管理流程驱动智能协作升级
内容概要 内容中台作为企业数字化转型的核心基础设施,通过技术架构革新与功能模块整合,重构了传统内容管理流程的底层逻辑。其核心价值在于构建动态化、智能化的内容生产与流转体系,将分散的创作、存储、审核及分发环节纳入统一平台管理。基…...
网络安全攻防演练——RT实战技巧篇
前言 又是一年hw招聘季,每年hw行动都会吸引大量网络安全从业者参加。同时也会有很多热爱网络安全但无从下手的网安爱好者参与。笔者旨在对网络安全有想法但是没有方向的师傅做一个简单的方向的了解,让师傅有方向去学习。 RT(红队) 1.引入 首先红队的…...
【MySQL】第六弹---数据库表约束详解:从空属性到主键的全方位指南
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】 目录 1. 表的约束 1.1 空属性 1.2 默认值 1.3 列描述 1.4 zerofill 1.5 主键 1. 表的约束 真正约束字段的是数据类型&…...
JMeter工具介绍、元件和组件的介绍
Jmeter功能概要 JDK常用文件目录介绍 Bin目录:存放可执行文件和配置文件 Docs目录:是Jmeter的API文档,用于开发扩展组件 printable_docs目录:用户帮助手册 lib目录:存放JMeter依赖的jar包和用户扩展所依赖的Jar包…...
vue3 在element-plus表格使用render-header
在vue2中 element表格render-header 源码是有返回h()函数的 在vue3 element-plus 表格源码 render-header函数没有返回h函数了 所以需要用render-header方法中创建虚拟DOM节点的话需要引用h方法 <el-table-column header-align"right" align"right" …...
IM 即时通讯系统-04-聊一聊 IM 要如何进行技术选型
IM 系列 IM 文档开源库 首先,后端技术选型是Java。Java有很多优势,比如跨平台性、丰富的生态系统、高性能和成熟稳定。这些都是为什么选择Java的原因。接下来,前端选用了Vue,因为它具有渐进式框架的特点、响应式数据绑定、组件化…...
机器学习_19 集成学习知识点总结
集成学习(Ensemble Learning)是一种强大的机器学习范式,通过组合多个模型的预测结果来提高整体性能和泛化能力。它在分类、回归和特征选择等任务中表现出色,广泛应用于各种实际问题。今天,我们就来深入探讨集成学习的原…...
自动驾驶---基于深度学习模型的轨迹预测
1 背景 自动驾驶任务中,轨迹预测一直以来是一个难题。 在复杂交通场景中,即使驾驶员最终意图确定,但决策过程中其他车辆的动态行驶路径的即时变化会导致自车路径呈现多模态属性,即车辆的未来轨迹有多种可能性。对车辆的多模态轨迹…...
线性模型 - 二分类问题的损失函数
在二分类问题中,损失函数用于量化模型预测与真实标签之间的差异,以指导模型参数的调整。本文,我们来一起学习一下常见的损失函数及其直观解释。 一、核心二分类损失函数及通俗理解 1. 0-1损失(Zero-One Loss) 公式&…...
string类详解(上)
文章目录 目录1. STL简介1.1 什么是STL1.2 STL的版本1.3 STL的六大组件 2. 为什么学习string类3. 标准库中的string类3.1 string类3.2 string类的常用接口说明 目录 STL简介为什么学习string类标准库中的string类string类的模拟实现现代版写法的String类写时拷贝 1. STL简介 …...
c# —— StringBuilder 类
StringBuilder 类是 C# 和其他一些基于 .NET Framework 的编程语言中的一个类,它位于 System.Text 命名空间下。StringBuilder 类表示一个可变的字符序列,它是为了提供一种比直接使用字符串连接操作更加高效的方式来构建或修改字符串。 与 C# 中的 stri…...
今日行情明日机会——20250217
2025年02月17日行情 后续投资机会分析 根据最新盘面信息,以下板块和个股具备潜在投资机会,需结合市场动态和基本面进一步验证: 1. 腾讯系AI(18家涨停) 核心逻辑:涨停家数最多(18家࿰…...
Openshift或者K8S上部署xxl-job
本案例以版本2.3.0为例 1. 源码编译成jar包 source code: https://github.com/xuxueli/xxl-job/blob/2.3.0/ 这里我们会得到两个jar包:xxl-job-admin-2.3.0.jar和xxl-job-executor-sample-springboot-2.3.0.jar 2. 初始化mysql数据库 sql code: https://github.…...
vite+vue3开发uni-app时低版本浏览器不支持es6语法的问题排坑笔记
重要提示:请首先完整阅读完文章内容后再操作,以免不必要的时间浪费!切记!!!在使用vitevue3开发uni-app项目时,存在低版本浏览器不兼容es6语法的问题,如“?.” “??” 等。为了方便…...
使用 Apache PDFBox 提取 PDF 中的文本和图像
在许多应用中,我们需要从 PDF 文件中提取文本内容和嵌入的图像。为了实现这一目标,Apache PDFBox 是一个非常实用的开源工具库。它提供了丰富的 API,可以帮助我们轻松地读取 PDF 文件、提取其中的文本、图像以及其他资源。 本文将介绍如何使…...
centos7arm架构安装mysql服务
1.安装新版mysql前,需将系统自带的mariadb卸载 rpm -qa|grep mariadb //查找mariadb的rpm包 rpm -e mariadb-libs-5.5.56-2.el7.x86_64 //卸载mariadb包 2.去官网下载对应mysq包https://downloads.mysql.com/archives/community/ 3.解压下载包&…...
【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调
文章目录 1.背景2.微调方式2.1 关键环境版本信息2.2 步骤2.2.1 下载llama-factory2.2.2 准备数据集2.2.3 微调模式2.2.3.1 zero-3微调2.2.3.2 zero-2微调2.2.3.3 单卡Lora微调 2.3 踩坑经验2.3.1 问题一:ValueError: Undefined dataset xxxx in dataset_info.json.2…...
后端生成二维码,前端请求接口生成二维码并展示,且多个参数后边的参数没有正常传输问题处理
一、后端代码 1、controller GetMapping("/generateQRCode/{url}")ApiOperation(value "生成url链接二维码",notes "生成url链接二维码")public JsonResult<NewsQRCodeVo> generateQRCode(PathVariable String url,HttpServletRespons…...
NBT群落物种级丰度鉴定新方法sylph
文章目录 简介为什么选择Sylph?Sylph的工作原理 Install使用解析成gtdb格式sylph 能做什么?sylph 不能做什么?ANI定义如何使用 sylph-utils 生成包含分类信息的配置文件耗时:66个样本耗时1h 转成easymicroplot可用数据 简介 Sylp…...
长视频生成、尝试性检索、任务推理 | Big Model Weekly 第56期
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 01 COMAL:AConvergent Meta-Algorithm for Aligning LLMs with General Preferences 许多对齐方法,包括基于人类反馈的强化学习(RLHF),依赖于布拉德利-特里&#…...
使用右侧值现象来处理一个word导入登记表的需求
需求也简单,导word文件用户登记表,有各部门的十几个版本(为什么这么多?不知道)。这里说下谈下我的一些代码做法: 需求分析: 如果能解决java字段和各项填的值怎么配对的问题,那么就…...
FRRouting配置与OSPF介绍,配置,命令,bfd算法:
文章目录 1、frrouting的配置:2、ospf2.1、检测和维护邻居关系2.2、ospfDR和BDR2.3、odpf邻居表2.4、ospf常用命令2.5、bfd配置 1、frrouting的配置: sudo service zebra start sudo service ospfd start telnet localhost 2604 en configure termina…...
基于ThinkPHP 5~8兼容的推荐算法类实现,
在现代推荐系统中,随着用户量和物品量的增长,传统的推荐算法可能会面临性能瓶颈。本文将介绍如何基于 ThinkPHP 实现一个高性能的推荐系统,结合显性反馈(如兴趣选择)、隐性反馈(如观看时长、评论、点赞、搜…...