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