Чтение видео и сохранение изображений в формате pgm с использованием python -openCV - PullRequest
2 голосов
/ 08 апреля 2020

Во-первых, извините, если вопрос глупый. Я начинающий с python opencv и обработки изображений.

Я создал программу для чтения видео в качестве входного и сохранения его в формате pgm.

import cv2
vidcap = cv2.VideoCapture('input_video.mp4')
success,image = vidcap.read()
count = 0
while success:
  cv2.imwrite("frame%d.pgm" % count, image)     # save frame as PGM file      
  success,image = vidcap.read()
  print('Read a new frame: ', success)
  count += 1
vidcap.release()

После работает, у меня есть кадры, которые кажутся не совсем формат изображения PGM. «Волшебный c номер» - это «F6» вместо «F5» формата PGM. Как я знаю, «число волшебный c» формата PPM (его можно назвать PGM «цвет», формат изображения цветного изображения с наименьшим общим знаменателем) является «F6». Я не понимаю, почему у меня не может быть точно изображения PGM в этом случае. Может кто-нибудь разобраться со мной в этом вопросе и дать мне решение для вывода кадров формата PGM на выходе?

видео (я не знаю, как загрузить видео здесь, поэтому я атакую ссылка). Я тестировал с этим видео и даже с серой версией, но «число волшебный c» всегда «F6».

В SO я нашел эту ссылку , которая может быть похожа на мой вопрос, но для C ++.

1 Ответ

2 голосов
/ 08 апреля 2020

Ваше изображение будет цветным, поэтому вам нужно будет преобразовать его в оттенки серого, прежде чем вы сможете сохранить его в формате PGM - это означает "Портативный Серый Карта" :

# Convert to grey
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Write to disk
cv2.imwrite("frame%d.pgm" % count, gray)

Кстати, ИМХО, как правило, плохая идея повторять код, который делает одно и то же в разных местах - это делает кошмар обслуживания. Вместо этого, когда вы делаете vidcap.read() дважды:

success,image = vidcap.read()
...
while success:
  cv2.imwrite("frame%d.pgm" % count, image)      
  success,image = vidcap.read()

рассмотрите возможность использования этого, чтобы вы могли читать видео только в одном месте, и есть только одно место для добавления / изменения параметров:

while True:
   success,image = vidcap.read()
   if not success:
       break
   cv2.imwrite("frame%d.pgm" % count, image)
...