当前位置: 首页 > news >正文

Python Opencv实践 - 霍夫圆检测(Hough Circles)

import cv2 as cv
import numpy as np
import matplotlib.pyplot as pltimg = cv.imread("../SampleImages/steelpipes.jpg")
print(img.shape)
plt.imshow(img[:,:,::-1])#转为二值图
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
plt.imshow(gray, cmap = plt.cm.gray)#Canny边缘检测(此步骤可以不做)
edges = cv.Canny(gray, 70, 120)
plt.imshow(edges, plt.cm.gray)#霍夫圆检测
#cv.HoughCircles(image,method,dp,minDist[,circles[,param1[,param2[,minRadius[,maxRadius]]]]])
#image:输入图像,8bit单通道图像。
#method:检测方法,当前有cv2.HOUGH_GRADIENT和cv2.HOUGH_GRADIENT_ALT 2种方法,后者是前者的改进方法。
#dp:检测圆心的累加器精度和图像精度比的倒数,比如dp=1时累加器和输入图像有相同的分辨率,dp=2时累加器是输入图像一半大的宽高;method=cv2.HOUGH_GRADIENT_ALT时推荐设置dp=1.5。
#minDist:检测到圆心的间距,设置的越小可能检测的圆形越多,设置的越大可能会错过一些圆形的检测。
#param1:特定方法参数,和method配合;当method=cv2.HOUGH_GRADIENT或method=cv2.HOUGH_GRADIENT_ALT时,该参数是canny检测的高阈值,低阈值是该参数的一半;method=cv2.HOUGH_GRADIENT_ALT时,内部使用Scharr计算图像梯度,这个值通常要设置得更大。
#param2:特定方法参数,和method配合;当method=cv2.OUGH_GRADIENT,它表示检测阶段圆心的累加器阈值,越小就会检测到更多的圆,越大能通过检测的圆就更加精确。当method=cv2.HOUGH_GRADIENT_ALT时,该参数可以看做是圆的“完美性”度量,它越接近1算法选择的圆形形状越好,一般可以设置在0.9。如果想要更好地检测小圆,可以设置在0.85、0.8甚至更小,通过限制搜索范围[minRadius,maxRadius]可以避免出现许多假圆。
#minRadius:最小圆半径。
#maxRadius:最大圆半径,如果设置为<=0,使用最大图像尺寸;如果<0时且method=cv2.HOUGH_GRADIENT用来查找圆心而忽略半径的查找,method=cv2.HOUGH_GRADIENT_ALT不受影响,始终会去找半径。
#circles:返回的圆形的点,是一个三维数组,HOUGH_GRADIENT和HOUGH_GRADIENT_ALT 2种不同方法返回的圆形数组形式有差异
#参考资料:https://blog.csdn.net/juzicode00/article/details/122263456
circles = cv.HoughCircles(edges, cv.HOUGH_GRADIENT, 1, 200, param1=100, param2=50, minRadius=20, maxRadius=200)
circles = np.uint16(np.around(circles))#绘制结果到原图
for c in circles[0, :]:#绘制圆周cv.circle(img, (c[0], c[1]), c[2], (0,255,0), 2)#绘制圆心cv.circle(img, (c[0], c[1]), 2, (0,0,255), 3)
plt.imshow(img[:,:,::-1])

 

 

http://www.lryc.cn/news/160022.html

相关文章:

  • 异步请求库的实际应用案例:爬取豆瓣经典电影
  • 数据结构学习系列之两个单向链表的合并
  • java网络编程,套接字socket
  • 一日一技:Python如何同时调用多个GPT的API?
  • 【云原生】Docker环境安装
  • 56、springboot ------ RESTful服务及RESTful接口设计
  • sysmonitor如何使用
  • 视频监控/视频汇聚/安防视频监控平台EasyCVR如何将默认快照的raw格式改为jpg/base64格式?
  • QRCode.js生成的二维码水平居中的解决方案
  • 在Cisco设备上配置接口速度和双工
  • 增益带宽积GBW
  • 二分搜索树节点的查找(Java 实例代码)
  • 2.9 PE结构:重建导入表结构
  • MybatisPlus插件功能详细介绍 自动分页 通用分页实体
  • ES kibana 创建索引快速脚本
  • 2023年09月编程语言流行度排名
  • linux对一个文件夹中的所有文件重命名
  • Greenplum执行SQL卡住的问题
  • Discourse 的系统日志
  • 【7z密码】如何给7z压缩包加密、解密?
  • InnoDB为什么使用B+Tree
  • 【Spring Bean的生命周期实现方式】
  • 腾讯云PK阿里云2核2G云服务器租用价格表
  • 【美团3.18校招真题2】
  • 一文带你快速入门『YOLOv8』
  • # 将PCL点云转换为Eigen向量进行运算
  • elmentui表单重置及出现的问题
  • 游戏平台加盟该怎么做?需要准备什么?
  • selenium中定位shadow-root,以及获取shadow-root内部的数据
  • OpenCV(三十二):轮廓检测