Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示
生活随笔
收集整理的這篇文章主要介紹了
Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Python+opencv 機器視覺 - 基于霍夫圈變換算法檢測圖像中的圓形實例演示
- 第一章:霍夫變換檢測圓
- ① 實例演示1
- ② 實例演示2
- ③ 霍夫變換函數解析
- 第二章:Python + opencv 完整檢測代碼
- ① 源代碼
- ② 運行效果圖
第一章:霍夫變換檢測圓
① 實例演示1
這個是設定半徑范圍 0-50 后的效果。
② 實例演示2
這個是設定半徑范圍 50-70 后的效果,因為原圖稍微大一點,半徑也大了一些。
③ 霍夫變換函數解析
cv.HoughCircles() 方法
參數分別為:image、method、dp、minDist、param1、param2、minRadius、maxRadius
其中:
image 為灰度圖像;
method 使用的方法為霍夫梯度法,目前已知的有 HOUGH_GRADIENT 和 HOUGH_GRADIENT_ALT 兩種,后者的準確率會更高一點;
dp 為累加器分辨率與圖片分辨率的反比。
minDist 為兩個圓中心的最小距離;
param1 對于 CV_HOUGH_GRADIENT 表示傳入 canny 邊緣檢測的閾值;
param2 對于 CV_HOUGH_GRADIENT 表示檢測階段圓心的累加閾值,值越小能檢測出的圓越多,值越大的話就檢測出來的少,但是檢測出來的圓形相比于沒檢測出來的會更圓、更完美一些;
minRadius 為最小半徑;
minRadius 為最大半徑;
首先通過均值偏移濾波降噪來排除干擾的點,提高識別的準確率,然后進行灰度處理。
# 均值偏移濾波降噪處理 mean_filter_img = cv.pyrMeanShiftFiltering(image, 10, 100) cv.imshow("mean_filter_img", mean_filter_img)# 圖像灰度處理 gray_img = cv.cvtColor(mean_filter_img, cv.COLOR_BGR2GRAY)# 霍夫圈變換 # 參數分別為:image, method, dp, minDist, param1, param2, minRadius, maxRadius # 其中:image為灰度圖像,method使用的方法為霍夫梯度法,minDist兩個圓中心的最小距離 circles = cv.HoughCircles(gray_img, cv.HOUGH_GRADIENT, 1, 30, param1=50, param2=30, minRadius=0, maxRadius=50)第二章:Python + opencv 完整檢測代碼
① 源代碼
# -*- coding:utf-8 -*- # 2021-12-17 # 作者:小藍棗 # opencv圓形檢測import cv2 as cv import numpy as npdef detect_circle(image):'''作用:圓形檢測參數:需要檢測圓的圖片返回:檢測出圓形的信息'''# 均值偏移濾波降噪處理mean_filter_img = cv.pyrMeanShiftFiltering(image, 10, 100)cv.imshow("mean_filter_img", mean_filter_img)# 圖像灰度處理gray_img = cv.cvtColor(mean_filter_img, cv.COLOR_BGR2GRAY)# 霍夫圈變換# 參數分別為:image, method, dp, minDist, param1, param2, minRadius, maxRadius# 其中:image為灰度圖像,method使用的方法為霍夫梯度法,minDist兩個圓中心的最小距離circles = cv.HoughCircles(gray_img, cv.HOUGH_GRADIENT, 1, 30, param1=50, param2=30, minRadius=0, maxRadius=50)# 對數據進行取整print("取整前信息:" + str(circles))circles = np.uint16(np.around(circles))print("取整后信息:" + str(circles))return circlesdef draw_circle(img, circles):'''作用:根據圓形信息在圖片中繪制圓參數1:原始圖片信息參數2:圓形坐標信息返回:無'''for i in circles[0, :]:# 繪制圓外圈# 參數分別為:圓心、半徑、顏色、線框寬度cv.circle(img, (i[0], i[1]), i[2], (0, 0, 255), 2)# 繪制圓心 cv.circle(img, (i[0], i[1]), 2, (255, 0, 0), 2)cv.imshow("draw_circle_img", img)# 讀取圖片信息 img = cv.imread("./image/meixi.jpg")# 設置窗口不可改變大小(參數包含:WINDOW_AUTOSIZE、WINDOW_NORMAL、WINDOW_OPENGL) cv.namedWindow("original image", cv.WINDOW_AUTOSIZE) cv.imshow("original image", img)# 檢測圓 circles = detect_circle(img) #繪制圓 draw_circle(img, circles)cv.waitKey(0) cv.destroyAllWindows()② 運行效果圖
原始圖片:
降噪后效果:
霍夫變換檢測圓處理后效果:
取整后效果圖:
喜歡的點個贊?吧!
總結
以上是生活随笔為你收集整理的Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 【大风号】短视频的自动上传
- 下一篇: SQL Server2019数据库创建数