import cv2 as cv
import numpy as np
def detect_circles_demo(image):
dst = cv.pyrMeanShiftFiltering(image, 10, 100) # 均值偏移滤波
'''
def pyrMeanShiftFiltering(src: Any, # 输入的8-比特,3-信道图象
sp: Any, # 空间窗的半径
sr: Any, # 色彩窗的半径
dst: Any = None,
maxLevel: Any = None, # 最大层次的金字塔分割
termcrit: Any = None) -> None
'''
cimage = cv.cvtColor(dst, cv.COLOR_BGR2GRAY) # 变成灰度图像
circles = cv.HoughCircles(cimage, cv.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)
'''
def HoughCircles(image: Any, # 输入 8-比特、单通道灰度图像
method: Any, # Hough 变换方式,目前只支持cv.HOUGH_GRADIENT,基于梯度图像来做
dp: Any, # 累加器图像的分辨率。这个参数允许创建一个比输入图像分辨率低的累加器。
# (这样做是因为有理由认为图像中存在的圆会自然降低到与图像宽高相同数量的范畴)。
# 如果dp设置为1,则分辨率是相同的;如果设置为更大的值(比如2),累加器的分辨率受此影响会变小(此情况下为一半)。
# dp的值不能比1小。
minDist: Any, # 该参数是让算法能明显区分的两个不同圆之间的最小距离。
circles: Any = None, #
param1: Any = None, # 用于Canny的边缘阀值上限,下限被置为上限的一半。
param2: Any = None, # 累加器的阈值。
minRadius: Any = None, # 最小圆半径。
maxRadius: Any = None) -> None # 最大圆半径。
'''
circles = np.uint16(np.around(circles)) # 转成整数
for i in circles[0, :]:
cv.circle(image, (i[0], i[1]), i[2], (0, 0, 255), 2)
cv.circle(image, (i[0], i[1]), 2, (255, 0, 0), 2)
cv.imshow("circles", image)
src = cv.imread("C:/Users/admin/Pictures/Saved Pictures/coins.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
detect_circles_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
OpenCV的霍夫曼圆检测
最新推荐文章于 2024-03-15 21:38:22 发布