OpenCV检测圆(Python版本)

文章目录

  • 示例代码
  • 示例结果
  • 调参

示例代码

import cv2
import numpy as np

# 加载图像
image_path = 'DistanceComparison/test_image/1.png'
image = cv2.imread(image_path, cv2.IMREAD_COLOR)

# 将图像转换为灰度
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用高斯模糊消除噪声
# gray_blurred = cv2.GaussianBlur(gray, (9, 9), 2)

# 应用霍夫变换进行圆检测
circles = cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT, dp=1, minDist=40, param1=40, param2=3,  minRadius=12, maxRadius=20)

# 如果找到了圆,输出圆的信息
if circles is not None:
    circles = np.uint16(np.around(circles))
    for i in circles[0, :]:
        # 绘制圆心
        cv2.circle(image, (i[0], i[1]), 1, (0, 100, 100), 3)
        # 绘制圆轮廓
        cv2.circle(image, (i[0], i[1]), i[2], (255, 0, 255), 2)

cv2.imwrite("DistanceComparison/out_image/1.png", image)

示例结果

请添加图片描述

图1:检测到的圆(粉色表示)

调参

如果你没有得到预期的结果,你可以尝试调整一些参数来优化圆的检测。以下是一些常用的参数和调整方法:

  1. param1param2:这两个参数是Canny边缘检测的阈值。增加param1可以减少检测到的圆的数量,增加param2可以过滤掉较弱的圆。你可以尝试不同的值来找到适合你图像的阈值。

  2. minRadiusmaxRadius:这两个参数用于指定允许检测到的圆的最小和最大半径。如果你知道圆的大致大小范围,可以设置这两个参数来限制检测的范围。

  3. dp参数:这个参数是霍夫梯度法的累加器分辨率与图像分辨率的反比。较小的值可以提高检测的精度,但可能会增加计算时间。较大的值可以加快计算速度,但可能会降低检测的精度。你可以尝试不同的值来平衡速度和精度。

  4. 图像预处理:在进行Hough变换之前,你可以尝试进行一些图像预处理操作,例如调整对比度、直方图均衡化、图像增强等,以提高圆的检测效果。

  5. 图像尺寸:如果图像尺寸过大,可以考虑将图像缩小到适当的尺寸,以加快计算速度。

尝试调整这些参数,并根据你的具体图像和需求进行优化。记住,在调整参数时,可以通过显示中间结果来观察效果,例如显示Canny边缘检测结果、显示霍夫累加器等。这样可以帮助你更好地理解参数对结果的影响,并进行调整。

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

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

相关文章

Python采集数据代码示例

python import requests from bs4 import BeautifulSoup # 设置信息 proxy_host proxy_port proxy_url fhttp://{proxy_host}:{proxy_port} proxy {http: proxy_url, https: proxy_url} # 设置要爬取的网页链接 url # 使用requests发送GET请求,并设置代理…

[C/C++]数据结构 链表OJ题:移除链表元素

题目描述: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 方法一: 从头开始遍历链表,当遇到相同元素则跳过该元素,指向下一节点 struct ListNode* removeElements(struct ListNode* head…

element tab组件,是否阻止切换

需求&#xff1a; 在tab切换之前判断当前页面是否有选择商品&#xff0c;如果有则在切换前提示用户保存 代码&#xff1a; <el-tabs v-model"tabActive" type"card" closable :before-leave"tabBefore" tab-remove"tabRemove">…

详解MES系统在质检管理中的多角度应用

MES系统的质检管理是指在制造过程中&#xff0c;利用MES系统的功能和工具来规划、执行和监控质检活动&#xff0c;以确保产品的质量符合预期标准和客户要求的管理过程。 1. 质检计划和标准制定&#xff1a; MES系统可以帮助企业制定质检计划&#xff0c;并定义质量标准和要求…

淘宝API商品详情接口丨关键词搜索接口丨用户评论接口丨淘宝销量接口

淘宝API商品详情接口&#xff0c;关键词搜索接口&#xff0c;用户评论接口&#xff0c;淘宝销量接口如下&#xff1a; 淘宝/天猫获得淘宝商品详情 API 返回值说明 item_get-获得淘宝商品详情 1.公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在…

Python 海龟绘图基础教学教案(十六)

Python 海龟绘图——第 32 题 题目&#xff1a;绘制下面的图形 解析&#xff1a; 循环绘制长方形里面一个小正方形 答案&#xff1a; import turtle as t for i in range(0,2): t.fd(140) t.lt(90) t.fd(80) t.lt(90) t.pu() t.fd(50) t.lt(90) t.fd(20) t.pd()for i…

Chatgpt人工智能对话源码系统分享 带完整搭建教程

ChatGPT的开发基于大规模预训练模型技术。预训练模型是一种在大量文本数据上进行训练的模型&#xff0c;可以学习到各种语言模式和知识。在ChatGPT中&#xff0c;预训练模型被用于学习如何生成文本&#xff0c;并且可以用于各种不同的任务&#xff0c;如对话生成、问答、摘要等…

不一样的编程方式 —— 协程(设计原理与汇编实现)

主要通过以下9个方面来了解协程的原理&#xff1a; 目录 1、为什么使用协程 1.3、协程的适用场景 2、协程的原语操作 3、协程的切换 3.1、汇编实现 4.协程的运行流程 5.协程的结构体定义(我们其实可以参照线程或者进程的状态来设计) 5.1、多状态集合设计 6.协程的调度…

正点原子嵌入式linux驱动开发——Linux 网络设备驱动

网络驱动是linux里面驱动三巨头之一&#xff0c;linux下的网络功能非常强大&#xff0c;嵌入式linux中也常常用到网络功能。前面已经讲过了字符设备驱动和块设备驱动&#xff0c;本章就来学习一下linux里面的网络设备驱动。 嵌入式网络简介 嵌入式下的网络硬件接口 本次笔记…

论文阅读—— CEASC(cvpr2023)

arxiv&#xff1a;https://arxiv.org/abs/2303.14488 github&#xff1a;https://github.com/Cuogeihong/CEASC 为了进一步减轻SC中的信息损失&#xff0c;使训练过程更加稳定&#xff0c;我们在训练过程中除了稀疏卷积之外&#xff0c;还保持了正常的密集卷积&#xff0c;生成…

GaussDB SQL基础语法-变量常量

目录 一、前言 二、GaussDB数据库中的常量和变量的基本概述及语法定义 1、变量定义 2、常量定义 3、其他&#xff08;%TYPE、%ROWTYPE属性&#xff09; 三、在GaussDB数据库中如何使用变量&常量&#xff08;示例&#xff09; 示例一&#xff0c;定义常量&变量&a…

【计算机网络】网络层IP协议

文章目录 1. IP协议介绍2. IP报头3. IP的分片和组装4. IP地址网段划分特殊的IP地址子网、局域网、网段的区别IP地址的数量限制 5. 公网IP和私有IP6. NAT技术7. 路由Route 1. IP协议介绍 IP协议&#xff08;Internet Protocol&#xff09;是一种最常用的网络层协议&#xff0c;…

echarts 类目轴设置xAxis.interval不起效果

情景&#xff1a;在xAxis.typecategory&#xff1b;设置xAxis.interval不起效果&#xff1b; 解决方案&#xff1a;通过设置xAxis.axisLabel.interval属性

3.JMeter高级使用-让你与众不同

目录 概述插件下载与安装插件下载配置插件 服务器硬件资源监控(精简版)配置服务端代理JMeter配置监控CPU 监控网络 JMeter下载结束 概述 今日目标&#xff1a; 插件下载与安装Basic Graphs 主要点 Average Response Time 平均响应时间Active Threads 活动线程数Successful/Fa…

CVE-2023-34040 Kafka 反序列化RCE

漏洞描述 Spring Kafka 是 Spring Framework 生态系统中的一个模块&#xff0c;用于简化在 Spring 应用程序中集成 Apache Kafka 的过程&#xff0c;记录 (record) 指 Kafka 消息中的一条记录。 受影响版本中默认未对记录配置 ErrorHandlingDeserializer&#xff0c;当用户将容…

学习笔记|秩相关分析|Spearman相关分析|Kendall相关分析|规范表达|《小白爱上SPSS》课程:SPSS第十九讲:秩相关分析怎么做?

目录 学习目的软件版本原始文档秩相关分析一、实战案例二、统计策略三、SPSS操作四、结果解读五、规范表达1、规范图表2、规范文字 六、划重点&#xff1a; 学习目的 SPSS第十九讲&#xff1a;秩相关分析怎么做&#xff1f; 软件版本 IBM SPSS Statistics 26。 原始文档 《…

开发记录【1】

给列表加上序号 实现&#xff1a;Oracle有自带序号rownum,加上这个字段即可 【开发细节1】更新人可通过共享组件获取 【开发细节2】存入部门ID&#xff0c;想让其展示部门名&#xff0c;使用了共享组件&#xff0c;但是没显示&#xff0c;这是为什么呢&#xff1f; 【原因及解…

技术分享 | Frida 实现 Hook 功能的强大能力

Frida 通过 C 语言将 QuickJS 注入到目标进程中&#xff0c;获取完整的内存操作权限&#xff0c;达到在程序运行时实时地插入额外代码和数据的目的。官方将调用代码封装为 python 库&#xff0c;当然你也可以直接通过其他的语言调用 Frida 中的 C 语言代码进行操作。 Frida安装…

AI生图王者之战!深度体验实测,谁是真正的艺术家?

10月11日凌晨&#xff0c;设计软件巨头Adobe宣布推出一系列图像生成模型&#xff0c;其中Firefly Image 2作为新一代图像生成器&#xff0c;通过改善皮肤、头发、眼睛、手和身体结构增强了人体渲染质量&#xff0c;提供更好的色彩和改进的动态范围&#xff0c;并为用户提供更大…

1100*C. Division by Two and Permutation(全排列数学)

Problem - 1624C - Codeforces 解析&#xff1a; 贪心&#xff0c;将每个数除到第一个没有出现的数字就停止。 #include<bits/stdc.h> using namespace std; #define int long long const int N2e55; int n,x,f[N]; void solve(){scanf("%lld",&n);memset…