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


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

     

     

  • 相关阅读:
    Tuxera NTFS 2022 for Mac破解版百度网盘免费下载安装激活教程
    有关栈和队列的三道OJ题【C语言】
    未享红利已入红海,充电桩的风口还在吗?
    【系统架构师】-案例篇(三)NoSQL与分布式对象调用
    线性约束最小方差准则(LCMV)波束形成算法仿真
    leetcode 23. 合并K个升序链表
    后台管理----新建和编辑hooks 封装
    鉴源论坛 · 观模丨软件单元测试真的有必要吗?(下)
    div内文字水平居中+垂直居中
    Sublime Text 下载和安装教程
  • 原文地址:https://blog.csdn.net/vivo01/article/details/132632003