使用OpenCV(Python)在视频或实时馈送中进行球/圆形状跟踪

时间:2016-01-27 13:39:15

标签: python opencv video shape

作为学校的一项任务,我们小组必须创建一个知道目标何时得分的应用程序。这意味着球形物体通过一条线。

首先,我们尝试输入视频,让OpenCV跟踪球,然后将其输出为视频。

我已经在StackOverflow上找到了一堆其他代码片段,但是它没有用。

我正在创建一个新帖子,因为所有其他相关线程都是C ++或使用颜色检测而不是我们使用的形状检测。在将视频文件转换为一系列图像时,我也无法找到输出视频文件的明确答案。

以下是我到目前为止的代码:

import cv2
import numpy as np

cap = cv2.VideoCapture('bal.mp4')


fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output1.avi',fourcc, 20.0, (640,480))

while(1):

    # Take each frame
    ret, frame = cap.read()
    if ret == True:
        if ret == 0:
            break


        frame = cv2.medianBlur(frame,5)
        cimg = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        circles = cv2.HoughCircles(cimg,3,1,20,param1=50,param2=30,minRadi$
        if circles == None:
            print "NoneType"
            break
        circles = np.uint16(np.around(circles.astype(np.double),3))

        for i in circles[0,:]:
            # draw the outer circle
            cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
            # draw the center of the circle
            cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)

        cv2.imwrite('test.jpg',cimg)
        out.write(cimg)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break


cap.release()
out.release()
cv2.destroyAllWindows()

我们获得了工作图像,但视频无法通过VLC或任何其他媒体播放器播放。

这是该计划的图片:

Frame in clip

此问题现在正在变成可播放的视频。

提前致谢。

1 个答案:

答案 0 :(得分:0)

不确定您最终是否可以使用它,但是将其更改为 mp4 在我的 Mac 上对我有用

frame_width = int(cap.get(3))
frame_height = int(cap.get(4))
out = cv2.VideoWriter('static/video/outpy.mp4', 0x7634706d, 20, (frame_width, frame_height))