利用opencv用于识别圆并计算圆的半径和圆心的坐标_计算机视觉,opencv 圆形检测...

头条号:人工智能研究所
微信号:启示AI科技

今天我们介绍一个opencv 函数cv2.HoughCircles(),此函数主要用于检测图像中的圆形,我们知道3点可以画一个圆,学习CAD的同学肯定知道,opencv使用霍夫梯度的方法进行圆的检测

首先对图像进行canny边缘检测,对边缘中的每一个非0点,通过Sobel算法计算局部梯度。那么计算得到的梯度方向,实际上就是圆切线的法线。三条法线即可确定一个圆心,同理在累加器中对圆心通过的法线进行累加,就得到了圆环的判定。

cv2.HoughCircles函数:

cv2.HoughCircles(image, method, dp, minDist, circles, param1, param2, minRadius, maxRadius)

1:image为输入图像,需要灰度图

2:method为检测方法:CV_HOUGH_GRADIENT

3:dp为检测内侧圆心的累加器图像的分辨率于输入图像之比的倒数,

如dp=1,累加器和输入图像具有相同的分辨率

如果dp=2,累计器便有输入图像一半的分辨率

4:minDist表示两个圆之间圆心的最小距离

5:param1默认值100,它是method设置的检测方法的对应的参数,

当前唯一的方法霍夫梯度法cv2.HOUGH_GRADIENT,

它表示传递给canny边缘检测算子的高阈值,而低阈值为高阈值的一半

6:param2默认值100,它是method设置的检测方法的对应的参数,

当前唯一的方法霍夫梯度法cv2.HOUGH_GRADIENT,

它表示在检测阶段圆心的累加器阈值,它越小,就越可以检测到更多根本不存在的圆,

而它越大的话,能通过检测的圆就更加接近完美的圆形了

7:minRadius默认值0,圆半径的最小值

8:maxRadius默认值0,圆半径的最大值

圆形检测的代码实现

import numpy as np
import cv2
image = cv2.imread("123.jpg")
output = image.copy()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1.2, 100)
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)
break
cv2.imshow("output", np.hstack([image, output]))
cv2.waitKey(0)

首先我们导入一张图片,这里需要主要一下要转到灰度空间

然后使用circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1.2, 100)函数对图片中的圆形进行检测,这里小编只显示了一个圆形,直接使用break函数 ,跳出for循环,因为里面检测到了很多无用的圆形,这里需要大家去优化函数中的各个参数,以便达到自己图片检测的目的

待图片检测完成后,使用cv2.circle(output, (x, y), r, (0, 255, 0), 4)函数,把检测到的图片中的圆形画出来,以便显示

利用opencv用于识别圆并计算圆的半径和圆心的坐标_计算机视觉,opencv 圆形检测..._第1张图片

代码截图

当然,此函数都可以检测多了圆形,删除代码中的break,函数便会显示所有的圆形,再次运行代码,便可以看到检测到的多 个圆形

利用opencv用于识别圆并计算圆的半径和圆心的坐标_计算机视觉,opencv 圆形检测..._第2张图片

检测到的多个圆形

这在计算机视觉应用中特别广泛,特别是工业自动化过程中,计算机视觉尤其重要,当然若想得到更精确的视觉检测,自己也可以进行神经网络的搭建与训练

微信搜索小程序:AI人工智能工具,体验不一样的AI工具

利用opencv用于识别圆并计算圆的半径和圆心的坐标_计算机视觉,opencv 圆形检测..._第3张图片

你可能感兴趣的:(利用opencv用于识别圆并计算圆的半径和圆心的坐标_计算机视觉,opencv 圆形检测...)