繁体   English   中英

OpenCV和Python:如果源不是来自网络摄像头,则视频输出为空

[英]OpenCV and Python: Video output is empty if the source is not coming from the webcam

我目前在python 2.7中正在与opencv挣扎

我要编写的程序的目的是使用VideoCapture(带有H264编解码器的mp4)打开源视频,应用一些过滤器(背景移除,对象跟踪等),并使用imshow功能,并将结果另存为另一个输出视频。

输出帧按原样显示,但问题是保存输出 一个空的 .avi(或mp4,或我作为VideoWriter函数的参数输入的任何内容)。 简而言之就是几个字节

到目前为止,您可以回答我没有使用编解码器格式的适当组合。 但是奇怪的是,如果我将VideoCapture更改为从网络摄像头流式传输(因此只需将VideoCaputure(“ source.mp4”)更改为VideoCapture(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()

有什么建议么?

正如肖申克在评论中所建议的那样,问题在于解决方案。 我试图以比原始来源小的分辨率保存视频输出。 所以我改变了

out = cv2.VideoWriter('output.avi', fourcc, 30, (640,480), True)

对于

out = cv2.VideoWriter('output.avi', fourcc, 30, (1920,1080), True)

希望其他人会发现此技巧有用:D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM