Я не смог выдать ошибку, поэтому мой ответ может быть неточным.
Но это может дать вам подсказку о том, как ее решить.
Я думаю, что по обоим вопросам вот ответ:
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
, и проверяю, нет ли отсутствующего кадра. по его номеру.