я пытаюсь записать видеоклип. У меня есть объект «наблюдатель», который создает кадры.
Когда я "imshow" изображения - я вижу все в порядке. У меня создается файл "avi". Но когда я пытаюсь его просмотреть - он пустой. клип 0 секунд черного экрана.
Что мне не хватает?
frames_count = 0
fourcc = cv2.VideoWriter_fourcc(*'XVID')
writer = cv2.VideoWriter('output.avi', fourcc, 15.0, frame_size)
while True:
img_pil = observer.get()
draw = ImageDraw.Draw(img_pil)
frame = cv2.cvtColor(np.array(img_pil), cv2.COLOR_BGR2GRAY)
writer.write(frame)
cv2.imshow(f"frame (q: {observer.q.qsize()})", frame)
frames_count += 1
if cv2.waitKey(1) & 0Xff == ord('q'):
break
if frames_count > 30:
break
writer.release()
Я изменил ответ, приведенный ниже. это некачественный ответ. ответ ниже просто добавляет две строки, строки 2 и 3, в которых используется video.get
. он ссылается на переменную несуществующийvideo
. вновь назначенные width
и height
никогда не используются.
Проблема в том, что изображение в градациях серого. Эта строка:
writer = cv2.VideoWriter('output.avi', fourcc, 15.0, frame_size)
Следует заменить на:
writer = cv2.VideoWriter('output.avi', fourcc, 15.0, frame_size,0)
frame
не по размеруframe_size
, не так ли? помните, VideoWriter хочет(width, height)
, но пустые формы(height, width, channels)
- что говоритassert writer.isOpened()
?