2015-12-27 79 views
0

我运行下面的代码:cv2.VideoCapture对蟒蛇

import numpy as np 
import cv2 
import os 

count = 0 

cap = cv2.VideoCapture("/home/simon/PROJECT/real_data/00000020.mp4") 

while not cap.isOpened(): 
    cap = cv2.VideoCapture("./00000020.mp4") 
    cv2.waitKey(1000) 
    print "Wait for the header" 

pos_frame = cap.get(cv2.cv.CV_CAP_PROP_POS_FRAMES) 
while True: 
    flag, frame = cap.read() 
    if flag: 
     # The frame is ready and already captured 
     cv2.imshow('video', frame) 
     pos_frame = cap.get(cv2.cv.CV_CAP_PROP_POS_FRAMES) 
     print str(pos_frame)+" frames" 
    else: 
     # The next frame is not ready, so we try to read it again 
     cap.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, pos_frame-1) 
     print "frame is not ready" 
     # It is better to wait for a while for the next frame to be ready 
     cv2.waitKey(1000) 

    if cv2.waitKey(10) & 0xFF == 27: 
     break 
    if cap.get(cv2.cv.CV_CAP_PROP_POS_FRAMES) ==  cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT): 
    # If the number of captured frames is equal to the total number of frames, 
    # we stop 
    break 


if ret == True: 
    frame = cv2.VideoCapture.grab() 
    frame = 'frame%d' % count 

    cv2.imwrite('frame%d.png', frame) 

    count += 1 
else: 
    print 'stopped at' + count 
    break 

每当我运行它,它循环的,而不是循环,打印“等标题”。 从来没有错误代码或类似的东西要么。

我试图运行它作为一种更简单的代码,在那里它不拥有所有这些检查,并再次不抛出任何错误。

我试图运行此代码打开一个视频,然后保存帧为PNG文件在整个视频。

有谁发现的代码任何特别的问题? 或可替换地没有人知道的一段代码,会做什么,我想更有效,因为我已经通过谷歌搜索拖网和最近堆栈溢出了很多,提前 没有发现任何

感谢熊猫

回答

0

为了播放视频,您需要在python目录中包含几个DLL。请参阅本作的细节:

https://li8bot.wordpress.com/2014/07/09/opencvpython-part-1-working-with-videos/

+0

我已经安装的ffmpeg,我检查这些之前,我这里张贴:) 谢谢你的建议,但。 您是否知道是否需要与视频长度相同的时间进行处理? – pandasarebest

+0

据我所知,它应该立即开始阅读。据我所知,Header问题是因为它无法解码视频,通常是因为opencv没有找到DLL。 –