为什么我的OpenCV视频拒绝写入磁盘?

时间:2015-09-22 20:32:47

标签: python-2.7 opencv codec

所以我开始对openCV库将视频写入磁盘的能力感到困惑,因为即使是openCV文档也不是非常清楚视频在这种情况下是如何实际写入的。我下面的代码似乎收集数据很好,但它试图写的视频文件中没有数据。我想做的就是拍摄我知道的视频,将其中的数据更改为0到255之间的斜坡,然后将该数据写回磁盘。但是,由于我不理解的原因,最终的I / O步骤没有合作。有人可以帮忙吗?找到以下代码:

import numpy as np
import cv2
import cv2.cv as cv



cap = cv2.VideoCapture("/Users/Steve/Documents/TestVideo.avi")  #The video
height = cap.get(cv.CV_CAP_PROP_FRAME_HEIGHT)  #We get some properties of the video
width = cap.get(cv.CV_CAP_PROP_FRAME_WIDTH)
fps = cap.get(cv.CV_CAP_PROP_FPS)
fourcc = cv2.cv.CV_FOURCC(*'PDVC')  #This is essential for testing

out = cv2.VideoWriter('output.avi',fourcc, int(fps), (int(width),int(height)))

xaxis = np.arange(width,dtype='int')
yaxis = np.arange(height,dtype='int')
xx,yy = np.meshgrid(xaxis,yaxis)

ramp=256*xx/int(width)   #This is a horizontal ramp image that scales from 0-255 across the width of the image


i=0
while(cap.isOpened()):
if i%100==0: print i
i+=1
ret, frame = cap.read()  #Grab a frame
if ret==True:
    # Change the frame data to the ramp instead of the original video                                                                                                                                                                                                                                             
    frame[:,:,0]=ramp   #The camera is B/W so the image is in B/W
    frame[:,:,1]=ramp
    frame[:,:,2]=ramp

    out.write(frame)  #Write to disk?

    cv2.imshow('frame',frame)  # I see the ramp as an imshow
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
else:
    break

cap.release()   #Clear windows
out.release()
cv2.destroyAllWindows()

1 个答案:

答案 0 :(得分:0)

您的代码通常是正确的,但在此过程中可能会默默地失败。

尝试添加一些调试行:

out = cv2.VideoWriter('output2.avi',fourcc, int(fps), (int(width),int(height)))

else:
    print "frame %d is false" % i
    break

当我在本地测试你的代码时,我发现对于我读过的大多数.avi文件,fps设置为0。手动将其设置为15或30工作。

我也没有运气让你的四分之一在我的机器上工作(osx),但这个工作正常。

fourcc = cv2.cv.CV_FOURCC('m', 'p', '4', 'v')