日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Python,OpenCV中的霍夫圆变换——cv2.HoughCircles()

發布時間:2023/11/27 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python,OpenCV中的霍夫圆变换——cv2.HoughCircles() 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python,OpenCV中的霍夫圓變換

    • 1. 效果圖
    • 2. 源碼
    • 參考

這篇博客將學習如何使用霍夫圓變換在圖像中找到圓圈,OpenCV使用cv2.HoughCircles()實現霍夫圓變換。

circles = cv2.HoughCircles(img,
cv2.HOUGH_GRADIENT, 1, 20,
param1=50, param2=40, minRadius=25, maxRadius=0)

  • img: 待檢測的灰度圖
  • cv2.HOUGH_GRADIENT:檢測的方法,霍夫梯度
  • 1:檢測的圓與原始圖像具有相同的大小,dp=2,檢測的圓是原始圖像的一半
  • 20:檢測到的相鄰圓的中心的最小距離(如果參數太小,除了一個真實的圓外,還可能會錯誤地檢測到多個相鄰圓。如果太大,可能會漏掉一些圓。)
  • param1:在#HOUGH?u梯度的情況下,它是較高的. 兩個閾值傳遞到Canny邊緣檢測器(較低的一個小兩倍)。
  • param2:在#HOUGH?u梯度的情況下,它是檢測階段圓心的累加器閾值。它越小,就越可能檢測到假圓;
  • minRadius:最小圓半徑
  • maxRadius:最大圓半徑,如果<=0,則使用最大圖像尺寸。如果<0,則返回沒有找到半徑的中心。

1. 效果圖

原始圖 VS 檢測圓效果圖如下:

如下右圖可以看到3個外側圓綠色,圓心紅色被成功檢測到;

圓的最小半徑設置由25調整為10,也可能會錯誤的檢測到圓,效果圖如下:

檢測圓半徑的閾值(param2設置35)的結果,最小圓半徑設置10,也可能會錯誤的檢測到圓,效果圖如下:

2. 源碼

# 霍夫圓檢測import cv2
import numpy as npcimg = cv2.imread('opencv_logo_350.jpg')
cv2.imshow("origin", cimg)
cv2.waitKey(0)
img = cv2.cvtColor(cimg,cv2.COLOR_BGR2GRAY)
img = cv2.medianBlur(img, 5)
cimg = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)# - img: 待檢測的灰度圖
# - cv2.HOUGH_GRADIENT:檢測的方法,霍夫梯度
# - 1:檢測的圓與原始圖像具有相同的大小,dp=2,檢測的圓是原始圖像的一半
# - 20:檢測到的圓的中心的最小距離(如果參數為太小,除了一個真實的圓外,還可能會錯誤地檢測到多個相鄰圓。如果太大,可能會漏掉一些圓。)
# - param1:在#HOUGH?u梯度的情況下,它是較高的. 兩個閾值傳遞到Canny邊緣檢測器(較低的一個小兩倍)。
# - param2:在#HOUGH?u梯度的情況下,它是檢測階段圓心的累加器閾值。它越小,就越可能檢測到假圓;
# - minRadius:最小圓半徑,也可能會檢測到假圓
# - maxRadius:最大圓半徑,如果<=0,則使用最大圖像尺寸。如果<0,則返回沒有找到半徑的中心。
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20,param1=50, param2=40, minRadius=0, maxRadius=0)
# 最小圓半徑設置不合適,也可能會檢測到假圓
# circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20,
#                            param1=50, param2=40, minRadius=0, maxRadius=0)
# circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20,
#                            param1=50, param2=30, minRadius=10, maxRadius=0)circles = np.uint16(np.around(circles))print(len(circles))
print(circles)
for i in circles[0, :]:# 繪制外圈圓(藍色)cv2.circle(cimg, (i[0], i[1]), i[2], (0, 255, 0), 2)# 繪制圓心(紅色)cv2.circle(cimg, (i[0], i[1]), 2, (0, 0, 255), 3)cv2.imshow('detected circles', cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

參考

  • https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_houghcircles/py_houghcircles.html#hough-circles

總結

以上是生活随笔為你收集整理的Python,OpenCV中的霍夫圆变换——cv2.HoughCircles()的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。