Python中的OpenCV:我的框架没有
我正在编写一个Python脚本来浏览一组视频(.mp4),并在每个视频的第100帧中随机获取5个64 x 64像素的图像。以下是我的代码: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
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)