【OpenCV入门学习--python】函数HoughCircles()来检测图像中的圆

例子源于OpenCV官网手册(https://opencv.org/)
使用OpenCV函数HoughCircles()来检测图像中的圆。

代码的功能:
加载一个图像和模糊它减少噪声
应用霍夫圆变换模糊图像。
在窗口中显示检测到的圆圈。

代码:

import sys
import cv2 as cv
import numpy as np
def main(argv):
    
    #加载图像
    default_file = 'round.png'
    filename = argv[0] if len(argv) > 0 else default_file
    # Loads an image
    src = cv.imread(cv.samples.findFile(filename), cv.IMREAD_COLOR)
    # Check if image is loaded fine
    if src is None:
        print ('Error opening image!')
        print ('Usage: hough_circle.py [image_name -- default ' + default_file + '] \n')
        return -1
    
    #转灰度图像
    gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
    
    #应用中值模糊来减少噪声和避免错误的圆检测:
    gray = cv.medianBlur(gray, 5)
    
    #继续应用霍夫圆变换:
    rows = gray.shape[0]
    circles = cv.HoughCircles(gray, cv.HOUGH_GRADIENT, 1, rows / 8,
                               param1=100, param2=30,
                               minRadius=1, maxRadius=30)
    
   # circles = cv.HoughCircles(gray,cv.HOUGH_GRADIENT,dp=1,minDist=50,
   #                       param1=50,param2=30
   #                       ,minRadius=0,maxRadius=0)

    
    """
    参数:
    gray:输入图像(灰度)。
    circles:一个存储3个值的矢量:xc,yc,r,用于每个被检测到的圆。
    定义检测方法。目前这是OpenCV中唯一可用的。
    dp = 1:分辨率的反比。
    min_dist =灰色。rows/16:检测中心之间的最小距离。
    param_1 = 200:内部Canny边缘检测器的上门限。
    param_2 = 100*:中心检测阈值。
    min_radius = 0:最小检测半径。如果未知,将0作为默认值。
    max_radius = 0:最大检测半径。如果未知,将0作为默认值。
    """
    
    
    #绘制检测到的圆圈:
    if circles is not None:
        circles = np.uint16(np.around(circles))
        for i in circles[0, :]:
            center = (i[0], i[1])
            # circle center
            #cv.circle(src, center, 1, (0, 100, 100), 3)
            cv.circle(src, center, 1, (0, 255, 0), 3)
            # circle outline
            radius = i[2]
            cv.circle(src, center, radius, (255, 0, 255), 3)
    
    #显示检测到的圆圈,等待用户退出程序:
    cv.imshow("detected circles", src)
    cv.waitKey(0)
    
    return 0
if __name__ == "__main__":
    main(sys.argv[1:])

运行结果:

原图:
在这里插入图片描述

检测到的圆:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值