给我写一个基于openCV的霍夫变换检测硬币并描出硬币轮廓的代码
时间: 2025-01-05 10:47:59 浏览: 94
在OpenCV中,你可以使用霍夫变换来检测直线特征,然后结合边缘检测(如Canny算子)和形状分析来识别硬币轮廓。这里是一个简化的Python代码示例,展示如何使用HoughCircles函数找到圆形并在图像上绘制硬币轮廓:
```python
import cv2
import numpy as np
def detect_coins(image_path):
# 读取图像
image = cv2.imread(image_path)
# 转为灰度图像并进行二值化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_, threshold = cv2.threshold(gray, 50, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
# 使用Canny算子增强边缘检测
edges = cv2.Canny(threshold, 50, 150)
# 霍夫变换检测圆形
circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT, dp=1, minDist=20, param1=50, param2=30, minRadius=40, maxRadius=80)
if circles is not None:
# 可能有多个圆,所以遍历并画出每个圆
circles = np.round(circles[0, :]).astype("int")
for (x, y, r) in circles:
# 画出轮廓
cv2.circle(image, (x, y), r, (0, 255, 0), 2)
cv2.rectangle(image, (x - 5, y - 5), (x + 5, y + 5), (0, 0, 255), -1) # 边框
return image
# 使用函数并显示结果
image_path = 'your_coin_image.jpg'
result = detect_coins(image_path)
cv2.imshow('Coin Detection', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
阅读全文
相关推荐


















