Python中的OpenCV:为我的框架获取无

时间:2017-02-19 16:03:17

标签: python opencv

我正在编写一个Python脚本来浏览一堆视频(.mp4),并且每个视频每100帧拍摄5张随机的64 x 64像素图像。这是我的代码:

import cv2
import random

IMAGE_SIZE = 64
IMAGES_PER_FRAME = 5

def get_images():
    categories = ['anemone', 'smoke', 'water']
    # for each category
    for category in categories:
        for i in range(len(categories)):
            # get video name (e.g. water2.mp4)
            video_name = category + str(i) + '.mp4'
            print('Processing: ' + video_name)
            process_video(video_name)


def process_video(video_name):
    # load video using cv2
    video_cap = cv2.VideoCapture(video_name)
    if video_cap.isOpened():
        ret, frame = video_cap.read()
    else:
        ret = False
    # while there's another frame
    i = 0
    j = 0
    while ret:
        ret, frame = video_cap.read()
        if i % 100 == 0:
            for k in range(IMAGES_PER_FRAME):
                # save several images from frame to local directory
                random_image = get_random_image(frame)
                file_name = video_name.replace('.mp4', '') + '_' + str(j) + '.png'
                cv2.imwrite(file_name, random_image)
            j += 1
        i += 1
    video_cap.release()


def get_random_image(frame):
    frame_height, frame_width, _ = frame.shape
    left_x = random.randrange(0, frame_width - IMAGE_SIZE)
    top_y = random.randrange(0, frame_height - IMAGE_SIZE)
    # get random 64 x 64 x 3 chunk from frame
    return frame[top_y:top_y + IMAGE_SIZE, left_x:left_x + IMAGE_SIZE, :]


get_images()

我的脚本浏览了所有'海葵'视频,但随后为'smoke1.mp4'提供了以下错误:

Traceback (most recent call last):
  File "getImages.py", line 49, in <module>
    process_video('smoke1.mp4')
  File "getImages.py", line 33, in process_video
    random_image = get_random_image(frame)
  File "getImages.py", line 42, in get_random_image
    frame_height, frame_width, _ = frame.shape
AttributeError: 'NoneType' object has no attribute 'shape'

所以不知何故,当我尝试处理'smoke1.mp4'时,我得到frame = None。我很不确定这是怎么可能的,特别是考虑到海葵视频效果很好。

有什么想法吗?

谢谢!

0 个答案:

没有答案