Python中的OpenCV:我的框架没有

Python中的OpenCV:我的框架没有,python,opencv,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 categor

我正在编写一个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'
回溯(最近一次呼叫最后一次):
文件“getImages.py”,第49行,在
处理视频(“smoke1.mp4”)
文件“getImages.py”,第33行,正在处理的视频
随机图像=获取随机图像(帧)
get_random_图像中第42行的文件“getImages.py”
框架高度,框架宽度,框架形状
AttributeError:“非类型”对象没有属性“形状”
所以,当我试图处理“smoke1.mp4”时,我得到了frame=None。我很不确定这是怎么可能的,尤其是考虑到海葵的视频效果很好

有什么想法吗


谢谢

尝试将ret,frame=video\u cap.read()移到i+=1之后(在process\u video函数中)。您实际上是在背对背地读取两个帧,而没有检查帧之间存在的条件。请检查您传递给
video\u cap=cv2.VideoCapture(video\u name)