В коде я вижу много вдохов.
1) большинство систем не знает путь ...
, который указан в '.../Desktop/Plot/'
, и, возможно, он должен быть ..
или ../..
вместо ...
2) вы используете относительный path
- '.../Desktop/Plot/'
, а когда вы используете os.chdir()
для изменения каталога, то относительный путь к текущей папке будет создать путь
../Desktop/Plot/../Desktop/Plot/
и это не правильный путь.
3) glob.glob(path+'*.png')
создаст filenames
с path
и .png
, но вы добавите path
и .png
для чтения изображения в imread()
- так что вы получите имя файла с двойным path
и двойным расширением
../Desktop/Plot/../Desktop/Plot/filename.png.png
, используйте print(path+filename+'.png')
, чтобы увидеть то, что вы пытаетесь прочитать.
Кстати: cv2
не вызывает ошибку, когда это может Не читайте изображение, но оно возвращает пустую рамку / изображение, и вы можете получить ошибку при попытке изменить пустое изображение.
4) , если размер изображения отличается от 640x400
, тогда он будет создавать пустое видео, потому что оно не изменяет размер изображения при сохранении в видео. Вы должны вручную изменить размер изображения перед сохранением в файл
img = cv2.resize(img, (width, height))
BTW некоторые декодеры не работают с некоторыми расширениями файлов - например, 'DIVX'
не будет сохраняться в файле с расширением .mov
КСТАТИ Вы можете сделать все с одним for
-l oop и без img_array
Моя версия
import cv2
import os
import glob
path = '../Desktop/Plot/'
#print(os.getcwd())
width = 640
height = 400
out = cv2.VideoWriter('project.avi', cv2.VideoWriter_fourcc(*'DIVX'), 15, (width,height))
for filename in sorted(glob.glob(path + '*.png')):
print(filename)
img = cv2.imread(filename)
img = cv2.resize(img, (width, height))
out.write(img)
out.release()