我正在编写一个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。我很不确定这是怎么可能的,特别是考虑到海葵视频效果很好。
有什么想法吗?
谢谢!