openCV imwrite写0 kb图像帧

时间:2017-09-21 01:19:32

标签: python-2.7 opencv opencv3.3

我正在运行以下代码将视频转换为帧。问题是它是创建0 KB大小的图像文件,当我打开它时没有显示任何东西..我不明白是什么创建了这个问题。我是否需要安装任何图像编解码器?

    '''
    Using OpenCV takes a mp4 video and produces a number of images. I am using OpenCV 3.3.0 version and Python 2.7


    Which will produce a folder called data with the images, There will be 2000+ images for example.mp4.
    '''
    import cv2
import numpy as np
import os

# Playing video from file:

try:
        cap = cv2.VideoCapture('aa.mkv')
except:
        print "Could not open video file"
        raise
print cap.grab()

try:
    if not os.path.exists('data'):
        os.makedirs('data')
except OSError:
    print ('Error: Creating directory of data')

currentFrame = 0
while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    if not frame is None:
        # Saves image of the current frame in jpg file
        name = './data/frame' + str(currentFrame) + '.jpg'
        print ('Creating...' + name)
        cv2.imwrite(name, frame)
        #cv2.imshow(name, frame)
    else:
        break

    # To stop duplicate images
    currentFrame += 1

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

1 个答案:

答案 0 :(得分:3)

您没有使用imwrite函数来编写帧。你的imshow函数名也拼错了。我已经对您的代码进行了更改。试试这个:

import cv2
import numpy as np
import os

# Playing video from file:
cap = cv2.VideoCapture('aa.mkv')

try:
    if not os.path.exists('data'):
        os.makedirs('data')
except OSError:
    print ('Error: Creating directory of data')

currentFrame = 0
while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    if not frame is None:
        # Saves image of the current frame in jpg file
        name = './data/frame' + str(currentFrame) + '.jpg'
        print ('Creating...' + name)
        cv2.imwrite(name, frame)
        cv2.imshow(name, frame)
    else:
        break

    # To stop duplicate images
    currentFrame += 1

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()