使用Python,OpenCV和Hough圆检测图像中的圆
生活随笔
收集整理的這篇文章主要介紹了
使用Python,OpenCV和Hough圆检测图像中的圆
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用Python,OpenCV和Hough圓檢測圖像中的圓
- 1. 效果圖
- 2. cv2.HoughCircles(image, method, dp, minDist)
- 3. 源碼
- 參考
前幾篇博客中有介紹,使用OpenCV檢測圖形中的三角形、正方形、矩形,多邊形;這篇博客將展示如何利用cv2.HoughCircles函數使用OpenCV檢測圖像中的圓圈。
1. 效果圖
圓的檢測要比正方形、矩形的檢測要難,因為不能簡單的根據輪廓的點數來確定圓;
簡單圓的檢測
8個圓的檢測,設置minDist:像素100,檢測的亂七八糟
8個圓的檢測,設置minDist 像素75,發現有點問題,最大的圓并沒有檢測出來,因為設置的圓心之間的距離為75像素
2. cv2.HoughCircles(image, method, dp, minDist)
- image:8位單通道圖像。如果要處理彩色圖像,請先轉換為灰度。
- method:定義檢測圖像中圓圈的方法。當前,唯一實現的方法是cv2.HOUGH_GRADIENT,
- dp:該參數是累加器分辨率與圖像分辨率的反比。本質上,dp越大,累加器陣列越小。
- minDist:檢測到的圓的中心(x,y)坐標之間的最小距離。如果minDist太小,則可能(錯誤地)檢測到與原始對象相同鄰域中的多個圓圈。如果minDist太大,則可能根本檢測不到某些圓圈。
- param1:用于處理邊緣檢測的漸變值。
- param2:cv2.HOUGH_GRADIENT方法的累加器閾值。閾值越小,將檢測到更多的圓圈(包括假圓圈)。閾值越大,可能會返回更多的圈。
- minRadius:半徑的最小大小(以像素為單位)。
- maxRadius:半徑的最大大小(以像素為單位)。
在設置參數時,正確設置minDist參數非常的重要。沒有最佳的minDist值,檢測最終會漏掉某些圓圈○,也可能檢測到許多錯誤的圓圈。
3. 源碼
# USAGE
# python detect_circles.py --image images/simple.png# 導入必要的包
import argparseimport cv2
import numpy as np# 構建命令行參數及解析
# --image 要檢測圓的圖像路徑
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
args = vars(ap.parse_args())# 加載圖像,復制到output,并轉換為灰度圖
image = cv2.imread(args["image"])
output = image.copy()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 在圖像上檢測圓
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1.2, 100)# 確保有圓檢測到進行后續操作
if circles is not None:# 將圓從浮點(x,y)坐標轉換為整數,從而可以在輸出圖像上繪制圓。circles = np.round(circles[0, :]).astype("int")# 遍歷圓的中心點,及半徑for (x, y, r) in circles:# 在輸出圖像上繪制圓,并且在圓中心繪制一個矩形框cv2.circle(output, (x, y), r, (0, 255, 0), 4)cv2.rectangle(output, (x - 5, y - 5), (x + 5, y + 5), (0, 128, 255), -1)# 展示輸出圖像cv2.imshow("output", np.hstack([image, output]))cv2.waitKey(0)
參考
- https://www.pyimagesearch.com/2014/07/21/detecting-circles-images-using-opencv-hough-circles/
總結
以上是生活随笔為你收集整理的使用Python,OpenCV和Hough圆检测图像中的圆的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超声波探伤仪对人体有没有害?
- 下一篇: 合作社的场地是谁画的呢?