Python实现霍夫变换对一张图片中圆的检测
时间: 2023-06-16 08:08:13 浏览: 108
霍夫变换是一种图像处理算法,可以用来检测图像中的圆、直线等形状。在Python中,我们可以使用OpenCV库来实现霍夫变换。
下面是一个简单的例子,演示如何使用霍夫变换来检测一张图片中的圆。
首先,我们需要导入必要的库:
```python
import cv2
import numpy as np
```
然后,我们读取一张图片,并将其转换为灰度图像:
```python
img = cv2.imread('circle.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
```
接下来,我们可以使用霍夫变换检测圆:
```python
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 20,
param1=50, param2=30, minRadius=0, maxRadius=0)
```
在上面的代码中,我们使用了cv2.HoughCircles()函数来检测圆。其中,第一个参数是输入的灰度图像,第二个参数是检测圆的方法(一般使用HOUGH_GRADIENT),第三个参数是图像分辨率与累加器分辨率的比例(一般为1),第四个参数是圆心之间的最小距离,第五个参数是Canny边缘检测的高阈值,第六个参数是累加器的阈值,第七个参数是最小半径,第八个参数是最大半径。
最后,我们可以将检测到的圆画出来:
```python
if circles is not None:
circles = np.round(circles[0, :]).astype("int")
for (x, y, r) in circles:
cv2.circle(img, (x, y), r, (0, 255, 0), 2)
```
在上面的代码中,我们首先判断是否检测到了圆。如果检测到了,我们就将其坐标和半径取整,并使用cv2.circle()函数画出圆。
完整代码如下:
```python
import cv2
import numpy as np
img = cv2.imread('circle.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 20,
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(img, (x, y), r, (0, 255, 0), 2)
cv2.imshow("circles", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
运行代码后,我们就可以在窗口中看到检测到的圆了。
阅读全文