Python视频圆检测

近日,应朋友邀请。继上次人脸识别之后,给他做一个圆识别(他可能要玩什么东西了)。

环境搭建和安装部分就不再赘述,参考上一篇博客即可。这次主要说一下,依靠OpenCV 进行圆识别。

关于函数参数输入输出:

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

这个时候输入为灰度图像,同时最好规定检测的圆的最大最小半径,不能盲目的检测,否侧浪费时间空间。输出就是三个参数空间矩阵。

程序主体还跟之前一样。主要是变化了检测部分:
下面就贴出部分代码:

# 打开视频捕获设备
video_capture = cv2.VideoCapture(0)
#video_capture.set()
while True:
    if not video_capture.isOpened():
        print('Unable to load camera.')
        sleep(1)
        break

    # 读视频帧
    ret, img = video_capture.read()
    # 转为灰度图像
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 灰度图像

    circles1 = cv2.HoughCircles(gray, cv2.cv.CV_HOUGH_GRADIENT, 1,100, param1=100, param2=30, minRadius=0, maxRadius=200)
    try:                             # 如果上一步没有检测到。执行try内容,就会报错。可以修改尝试看下。
        circles = circles1[0, :, :]  # 提取为二维
    except TypeError:
        print ('NULL')
    else:
        circles = np.uint16(np.around(circles))  # 四舍五入
        for i in circles[:]:
            cv2.circle(img, (i[0], i[1]), i[2], color=[0, 0, 0], thickness=2)  # 画圆
            cv2.circle(img, (i[0], i[1]), 2, color=[0, 255, 0], thickness=2)  # 画圆心
            print i[0], i[1]  # 输出坐标

    # 显示视频
    cv2.imshow('Video', img)

效果图就不贴了,大家有兴趣就编写运行一下。当然,需要根据实际情况修改检测参数,参照函数介绍。

可能出现的问题:
1. 部分朋友可能在检测函数中使用: cv2.HOUGH_GRADIENT ,从而出现报错现象。可以按实际情况修改为 cv2.cv.CV_HOUGH_GRADIENT。(博主就报错了,修改后OK)
2. 在此附上 OpenCV 的说明文档。URL: http://www.opencv.org.cn/opencvdoc/2.3.2/html/index.html

你可能感兴趣的:(Python)