我无法产生错误,因此我的答案可能不准确。
但它可能会为您提供如何解决它的线索。
我认为对于这两个问题,以下是答案:
from cv2 import VideoCapture
from cv2 import imshow, waitKey
missing_frames = []
capture = VideoCapture('path/to/images/%010d.jpg')
while True:
_, frame = capture.read()
if frame is None:
missing_frames.append(frame)
else:
imshow('out', frame)
waitKey(0)
说明
您正在使用VideoCapture 读取一系列图像,并且目录中缺少一些帧。
如果缺少帧,ret 返回 False,frame 返回 None。
ret, frame = capture.read()
我了解到您正在专注于阅读和编写框架。因此,您不需要 ret 变量。只需检查frame 就足够了。
如果目录中没有frame,请将其添加到mssing_frames 列表中。否则显示它。
我试着给你一个关于你如何解决它的意见。如果你问我,我解决的问题如下:
from os import getcwd
from os.path import join
from cv2 import imshow
from cv2 import waitKey
from cv2 import imread
from glob import glob
def get_integer(frame_name):
frame_name = frame_name.replace(path, '')
frame_name = frame_name.replace('.jpg', '')
frame_number = int(frame_name[1:])
return frame_number
if __name__ == '__main__':
missing_frames = []
path = join(getcwd(), 'test-case')
capture = glob(join(path, '*.jpg'))
name = capture[0]
name_num = get_integer(name)
for frame in capture:
frame_num = get_integer(frame)
if name_num != frame_num:
missing_frames.append(frame)
imshow('out', imread(frame))
waitKey(0)
name_num += 1
print(missing_frames)
输出:
['/Users/ahmettavli/PycharmProjects/StackOverFlow/test-case/0000000023.jpg']
我使用glob 存储了所有图像,并通过其编号检查是否缺少帧。