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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示

發布時間:2025/4/16 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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_GRADIENTHOUGH_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 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示的全部內容,希望文章能夠幫你解決所遇到的問題。

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