opencv-python 实现用霍夫圆变换找圆心坐标
作者:RayChiu_Labloy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
实验图片:
效果:
代码:
# 加载环境包
import cv2
import numpy as np# 图片简单处理
img = cv2.imread('00.jpg') # 读取图片
GrayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度化
GrayImage = cv2.medianBlur(GrayImage, 5) # 中值模糊"""
阈值处理,输入图片默认为单通道灰度图片 threshold()为固定阈值二值化
第二参数为阈值
第三参数为当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值(一般情况下,都是256色,所以默认最大为255)
thresh_binary是基于直方图的二值化操作类型,配合threshold一起使用。此外还有cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
"""
ret, th1 = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_BINARY)
"""
adaptiveThreshold()自适应阈值二值化,自适应阈值二值化函数根据图片一小块区域的值来计算对应区域的阈值,从而得到也许更为合适的图片。
第二参数为当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值(一般情况下,都是256色,所以默认最大为255)
第三参数为阈值计算方法,类型有cv2.ADAPTIVE_THRESH_MEAN_C,cv2.ADAPTIVE_THRESH_GAUSSIAN_C
第四参数是基于直方图的二值化操作类型,配合threshold一起使用。此外还有cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
第五参数是图片中分块的大小
第六参数是阈值计算方法中的常数项
"""
th2 = cv2.adaptiveThreshold(GrayImage, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 3, 5)
th3 = cv2.adaptiveThreshold(GrayImage, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 3, 5)kernel = np.ones((5, 5), np.uint8) # 创建全一矩阵,数值类型设置为uint8
erosion = cv2.erode(th2, kernel, iterations=1) # 腐蚀处理
dilation = cv2.dilate(erosion, kernel, iterations=1) # 膨胀处理imgray = cv2.Canny(erosion, 30, 100) # Canny算子边缘检测
"""
第3参数默认为1
第4参数表示圆心与圆心之间的距离(太大的话,会很多圆被认为是一个圆)
第5参数默认为100
第6参数根据圆大小设置(圆越小设置越小,检测的圆越多,但检测大圆会有噪点)
第7圆最小半径
第8圆最大半径
"""
circles = cv2.HoughCircles(imgray, cv2.HOUGH_GRADIENT, 1, 80, param1=100, param2=20, minRadius=200,maxRadius=230) # 霍夫圆变换
"""
np.uint16数组转换为16位,0-65535
np.around返回四舍五入后的值
"""
circles = np.uint16(np.around(circles))P = circles[0] # 去掉circles数组一层外括号
for i in P:# 画出外圆cv2.circle(img, (i[0], i[1]), i[2], (0, 255, 0), 2) # 第二参数()内是圆心坐标,第三参数是半径,第四参数()内是颜色,第五参数是线条粗细# 画出圆心cv2.circle(img, (i[0], i[1]), 2, (0, 0, 255), 3)
print("圆的个数是:")
print(len(P))
for i in P:r = int(i[2])x = int(i[0])y = int(i[1])print("圆心坐标为:", (x, y))print("圆的半径是:", r)cv2.imshow('detected circles', img) # 第一参数为窗口名称cv2.waitKey(0) # 无穷大等待时间
cv2.destroyAllWindows()
【如果对您有帮助,交个朋友给个一键三连吧,您的肯定是我博客高质量维护的动力!!!】
opencv-python 实现用霍夫圆变换找圆心坐标相关推荐
- Python,OpenCV中的霍夫圆变换——cv2.HoughCircles()
Python,OpenCV中的霍夫圆变换 1. 效果图 2. 源码 参考 这篇博客将学习如何使用霍夫圆变换在图像中找到圆圈,OpenCV使用cv2.HoughCircles()实现霍夫圆变换. cir ...
- OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑
本篇文章中,我们一起探讨了OpenCV中霍夫变换相关的知识点,以及了解了OpenCV中实现霍夫线变换的HoughLines.HoughLinesP函数的使用方法,实现霍夫圆变换的HoughCircle ...
- 【OpenCV新手教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/26977557 作者:毛星云(浅墨) ...
- 【OpenCV入门教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/26977557 作者:毛星云(浅墨) ...
- OpenCV之imgproc 模块. 图像处理(3)霍夫线变换 霍夫圆变换 Remapping 重映射 仿射变换
霍夫线变换 目标 在这个部分您将学习到: 使用OpenCV的以下函数 HoughLines 和 HoughLinesP 来检测图像中的直线. 原理 Note 以下原理的说明来自书籍 学习OpenCV ...
- OpenCV 霍夫圆变换Hough Circle Transform
OpenCV 霍夫圆变换Hough Circle Transform 霍夫圆变换Hough Circle Transform 目标 理论 霍夫圆变换 这个程序做什么? 代码 解释 加载图像: 将其转换 ...
- 【opencv】——钢管计数(霍夫圆变换 + 阈值 + canny)
目录 方法一:霍夫圆变换 + canny 方法二 阈值 + 寻边 对图中的钢管进行计数 方法一:霍夫圆变换 + canny # 霍夫圆变换,主要是要将参数调整好 def method1():img = ...
- OpenCV3学习(6.2)——霍夫(Hough)变换:霍夫线变换HoughLine,霍夫圆变换HoughCircles
霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等).最基本的霍夫变换是从黑白图像中检测直线(线段) ...
- OpenCV3之——霍夫变换(霍夫线变换和霍夫圆变换)
霍夫变换 本文章参考@浅墨_毛星云的博客.转载请注明出处. 参考链接: http://blog.csdn.net/poem_qianmo/article/details/26977557 写作当前博文 ...
最新文章
- android 动画x轴旋转,Android Roate3dAnimation实现围绕y轴竖直方向或者绕x轴方向旋转的3d动画效果...
- CSipSimple通话记录分组
- 后台开发经典书籍--大话设计模式
- boost::fusion::set用法的测试程序
- Azure App Service 上的根证书
- 通过syslog接收远程日志
- 敏捷无它,唯持续改进
- 编译OpenJDK12:test_json.cpp error C2143 语法错误
- apache php的权限,Unix上的Apache PHP写权限
- 项目管理术语中英文对照
- noip2013 day2
- 基于 OpenLayers3 实现的 HTML5 GIS 电信资源管理系统
- 你为什么要去博物馆? 我的理由比较另类
- Python numpy.ones_like函数方法的使用
- Android OpenGL ES从入门到进阶(六)—— OpenGL ES人像美白与磨皮初探
- javacv 人脸追踪_基于JavaCV的人脸识别程序
- lm358集成电路参数资料 原厂资料 pdf datasheet 免费下载
- android ble配对绑定,Android蓝牙(一)搜索配对和绑定
- STM32的中断优先级NVIC
- java绘制均线图_利用JFreeChart绘制股票K线图完整解决方案
热门文章
- shellcheck警告:Use “${var:?}“ to ensure this never expands to /* .
- 看准再下手 6000以下最值得购买8款本
- 软件测试计划与实施,软件测试实施计划书模板(通用版).doc
- 拷贝构造(浅拷贝,深拷贝)
- Java 使用 Ganymed SSH-2 连接 Linux
- 生产质量分析方案,实现车企“质量”和“销量”共赢!
- 重庆大学李婷婷计算机学院,计算机学院成立平安校园巡查队的通知
- python基础编程小实例1——计算圆的面积
- 数据存储和界面展现之二
- 如何让过长的文字显示省略号(...)