我目前正在python2.7中使用opencv
我正在编写的程序的目的是用VideoCapture打开一个源视频(是一个mp4和H264编解码器),应用一些过滤器(背景删除,目标跟踪,诸如此类),用imshow函数将结果显示在一个帧中,并将结果保存为另一个输出视频。在
输出帧显示得很好,但问题是保存的输出是一个空的.avi(或mp4,或我作为VideoWriter函数的参数的任何内容)。只是几个字节的简单说明。在
到目前为止,你可以回答我没有使用适当的编解码器格式组合。 但奇怪的是,如果我将视频捕获从网络摄像头改为流式(所以只需更改视频容量(“来源.mp4“)到视频捕获(webcamindex)并保持所有设置不变,效果良好!在
我的程序是这样的,我只是省略了函数
import cv2
import numpy as np
#VIDEO INPUT: SWITCHING THE TWO LINES BELOW IT WORKS!
#cap = cv2.VideoCapture(1)
cap = cv2.VideoCapture('input.mp4')
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 30, (640,480), True)
while True:
ret, frame = cap.read()
#A BACKGROUND REMOVAL FUNCTION
maskedMotion = justMotion(frame)
#A FUNCTION THAT FINDS CIRCLE THROUGH THE HOUGHCIRCLE FUNCTION
circle = findBall(maskedMotion)
#DRAW THE CIRCLES
if circle!=None and circle.size != 0:
for i in circle[0,:]:
#draw the outer circle
cv2.circle(maskedMotion,(i[0],i[1]),i[2],(0,255,0),2)
#draw the center of the circle
cv2.circle(maskedMotion,(i[0],i[1]),2,(0,0,255),3)
out.write(maskedMotion)
cv2.imshow('Result', maskedMotion)
#ESCAPE SEQUENCE
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
out.release()
cv2.destroyAllWindows()
有什么建议吗?在
正如肖申克在一篇评论中所说,问题在于解决方案。我试图用比原始源更小的分辨率保存视频输出。所以我就换了
为
^{pr2}$希望其他人会发现这个提示有用:D
相关问题 更多 >
编程相关推荐