详解利用python+opencv识别图片中的圆形(霍夫变换)

 更新时间:2019年07月01日 14:53:31   作者:智元元  
这篇文章主要介绍了详解利用python+opencv识别图片中的圆形(霍夫变换),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在图片中识别足球

先补充下霍夫圆变换的几个参数知识:

  1. dp,用来检测圆心的累加器图像的分辨率于输入图像之比的倒数,且此参数允许创建一个比输入图像分辨率低的累加器。上述文字不好理解的话,来看例子吧。例如,如果dp= 1时,累加器和输入图像具有相同的分辨率。如果dp=2,累加器便有输入图像一半那么大的宽度和高度。
  2. minDist,为霍夫变换检测到的圆的圆心之间的最小距离,即让我们的算法能明显区分的两个不同圆之间的最小距离。这个参数如果太小的话,多个相邻的圆可能被错误地检测成了一个重合的圆。反之,这个参数设置太大的话,某些圆就不能被检测出来了。
  3. param1,有默认值100。它是method设置的检测方法的对应的参数。对当前唯一的方法霍夫梯度法,它表示传递给canny边缘检测算子的高阈值,而低阈值为高阈值的一半。
  4. param2,也有默认值100。它是method设置的检测方法的对应的参数。对当前唯一的方法霍夫梯度法,它表示在检测阶段圆心的累加器阈值。它越小的话,就可以检测到更多根本不存在的圆,而它越大的话,能通过检测的圆就更加接近完美的圆形了。
  5. minRadius,默认值0,表示圆半径的最小值。
  6. maxRadius,也有默认值0,表示圆半径的最大值。

源代码:

# -*- coding: utf-8 -*- 
""" 
Created on Tue Sep 26 23:15:39 2017 
 
@author: tina 
""" 
import cv2 
import numpy as np 
import matplotlib.pyplot as plt 
 
img = cv2.imread('C:\\Users\\tina\\Pictures\\ahh\\ball.jpg') 
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
 
plt.subplot(121),plt.imshow(gray,'gray') 
plt.xticks([]),plt.yticks([]) 
 
circles1 = cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1, 
600,param1=100,param2=30,minRadius=80,maxRadius=97) 
circles = circles1[0,:,:] 
circles = np.uint16(np.around(circles)) 
for i in circles[:]:  
  cv2.circle(img,(i[0],i[1]),i[2],(255,0,0),5) 
  cv2.circle(img,(i[0],i[1]),2,(255,0,255),10) 
  cv2.rectangle(img,(i[0]-i[2],i[1]+i[2]),(i[0]+i[2],i[1]-i[2]),(255,255,0),5) 
   
print("圆心坐标",i[0],i[1]) 
plt.subplot(122),plt.imshow(img) 
plt.xticks([]),plt.yticks([]) 

原图:

识别后效果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解

    Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解

    这篇文章主要介绍了Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法,结合具体实例形式较为详细的分析了Python面向对象程序设计中类的定义、实例化、封装、私有变量、私有方法等相关使用技巧,需要的朋友可以参考下
    2019-02-02
  • Python装饰器原理与用法分析

    Python装饰器原理与用法分析

    这篇文章主要介绍了Python装饰器原理与用法,结合实例形式分析了Python装饰器的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-04-04
  • python使用selenium模拟浏览器进入好友QQ空间留言功能

    python使用selenium模拟浏览器进入好友QQ空间留言功能

    这篇文章主要介绍了python使用selenium模拟浏览器进入好友QQ空间留言,在本文实现过程中需要注意的是留言框和发表按钮在不同的frame,发表在外面的一层,具体实现过程跟随小编一起看看吧
    2022-04-04
  • python中matplotlib实现随鼠标滑动自动标注代码

    python中matplotlib实现随鼠标滑动自动标注代码

    这篇文章主要介绍了python中matplotlib实现随鼠标滑动自动标注代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 快速上手基于Anaconda搭建Django环境的教程

    快速上手基于Anaconda搭建Django环境的教程

    Django具有完整的封装,开发者可以高效率的开发项目,Django将大部分的功能进行了封装,开发者只需要调用即可,接下来通过本文给大家介绍基于Anaconda搭建Django环境的教程,需要的朋友可以参考下
    2021-10-10
  • 神经网络相关之基础概念的讲解

    神经网络相关之基础概念的讲解

    今天小编就为大家分享一篇关于神经网络相关之基础概念的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Python如何操作office实现自动化及win32com.client的运用

    Python如何操作office实现自动化及win32com.client的运用

    这篇文章主要介绍了Python如何操作office实现自动化及win32com.client的运用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Python写的英文字符大小写转换代码示例

    Python写的英文字符大小写转换代码示例

    这篇文章主要介绍了Python写的英文字符大小写转换代码示例,本文例子相对简单,本文直接给出代码实例,需要的朋友可以参考下
    2015-03-03
  • 20个解决日常编程问题的Python代码分享

    20个解决日常编程问题的Python代码分享

    在这篇文章中,主要和大家分享了20个Python代码片段,以帮助你应对日常编程挑战。文中的示例代码讲解详细,感兴趣的小伙伴可以跟上小编一起了解一下
    2023-01-01
  • Python计时相关操作详解【time,datetime】

    Python计时相关操作详解【time,datetime】

    这篇文章主要介绍了Python计时相关操作,涉及time,datetime模块的使用技巧,包括时间戳、时间差、日期格式等操作方法,需要的朋友可以参考下
    2017-05-05

最新评论