python-opencv[图像处理-霍夫圆检测]

文章介绍了霍夫圆检测的原理,包括圆心检测和半径确定,并提供了Python代码示例,应用OpenCV库进行边缘检测和圆检测。在代码中,调整了相关参数以寻找图像中的圆,但指出参数调节可能不精确导致一些偏差。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

霍夫圆检测(HoughCircles)

霍夫圆检测是先进行圆心的确定,然后根据圆心推导出半径。
1。圆心检测的原理:圆心是无数条直线相交的结果,那么可以设定一个阈值,如果相交于一点的直线超过了阈值,那么就可以将该点确定为圆心。
2.确定了圆心,那么圆上的点到圆心的距离是固定的,即为半径,设定阈值,如果有很多点到圆心的距离超过了阈值,那么该距离就设定为半径
3.知道了半径和圆心,那么就获取到了整个圆的方程,就可以进行圆的检测和绘制了。
霍夫圆检测代码:

import cv2 as cv
import numpy as np
import  matplotlib.pyplot as plot


img=cv.imread(r"C:\Users\Windows\Desktop\0072.jpg")
img1=cv.cvtColor(img,cv.COLOR_BGR2GRAY)#转灰度图
img1=cv.Canny(img1,10,76)#边缘检测
plot.imshow(img1,cmap=plot.cm.gray)
plot.show()
img4=cv.HoughCircles(img1,cv.HOUGH_GRADIENT,1,200,param1=100,param2=50,minRadius=60,maxRadius=110)
print(img4)
for i in img4[0,:]:
    cv.circle(img1,(i[0],i[1]),i[2],(255,255,0),2)#绘制检测到的圆
plot.imshow(img1,cmap=plot.cm.gray)
plot.show()

霍夫圆参数记录:

cv.HoughCircles(img1,cv.HOUGH_GRADIENT,1,200,param1=100,param2=50,minRadius=60,maxRadius=110)

img=待处理图像
cv.HOUGH_GRADIENT=霍夫变换使用的算法
1,200=霍夫空间分辨率,圆心之间的最小距离
param1=100 =高阈值
param2=50 =检测圆心和确定半径时用的阈值
minRadius=60,maxRadius=110 =检测到圆半径的最小值和最大值

实验结果

霍夫圆检测之前:
在这里插入图片描述
霍夫圆检测之后:
在这里插入图片描述
小记:参数调节不是很对,所以有一些偏差。

Hough变换是一种用于检测图像中几何形状(如直线和圆)的技术。以下是一个使用PythonOpenCV库实现Hough变换检测圆的示例代码: ```python import cv2 import numpy as np # 读取图像 image = cv2.imread('circle_image.jpg') output = image.copy() gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 使用霍夫圆变换 circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, dp=1.2, minDist=100, param1=50, param2=30, minRadius=0, maxRadius=0) # 如果检测到圆 if circles is not None: 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) cv2.destroyAllWindows() else: print("No circles found") # 释放所有窗口 cv2.destroyAllWindows() ``` ### 代码解释: 1. **读取图像**:使用`cv2.imread`读取图像。 2. **灰度转换**:使用`cv2.cvtColor`将图像转换为灰度图。 3. **霍夫圆变换**:使用`cv2.HoughCircles`进行圆检测。 4. **绘制圆**:如果检测到圆,使用`cv2.circle`和`cv2.rectangle`绘制圆和外圆。 5. **显示结果**:使用`cv2.imshow`显示结果图像。 ### 参数说明: - `dp`:累加器分辨率与图像分辨率的反比。 - `minDist`:检测到的圆之间的最小距离。 - `param1`:边缘检测器的较高阈值。 - `param2`:圆心检测的累加器阈值。 - `minRadius`:检测到的圆的最小半径。 - `maxRadius`:检测到的圆的最大半径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值