Почему функция opencv Videocapture читает видеокадры с неправильными значениями пикселей? - PullRequest
0 голосов
/ 27 сентября 2019

Я снимаю видео с камеры и сохраняю их с помощью функции opencv VideoWriter.Я сохраняю захваченные видео как несжатые файлы avi.Когда я заканчиваю запись видео, у меня есть другой скрипт, который должен читать видео кадр за кадром, обрабатывать значения пикселей.Однако, когда я пытаюсь прочитать кадры сохраненного видео, значения пикселей немного сбрасываются.

Например, сравнивая первые кадры записываемого видео и читаемого видео (предполагается, что100% идентичны), я замечаю, что значения пикселей отключены на небольшое число (значения RGB на небольшое число, обычно меньше 5).

Я уже убедился, что использую точно такое жевидеокодек при записи видео и при чтении видео (проверьте код ниже)

def write_video():
    out = cv2.VideoWriter("encrypted.avi" ,cv2.VideoWriter_fourcc(*'XVID'),30, (640,480))
    foreach frame:
        out.write(frame)

def read_video():
    cap = cv2.VideoCapture("encrypted.avi")
    cap.set(cv2.CAP_PROP_FOURCC,cv2.VideoWriter_fourcc(*'XVID'))
    while(cap.isOpened()):
        ret, frame = cap.read()

Для моего приложения записываемые и читаемые кадры должны совпадать на 100%.Я включил изображение, подчеркивающее разницу между первым кадром в записываемом видео и читаемым видео.Любая помощь очень ценится!

enter image description here

1 Ответ

0 голосов
/ 27 сентября 2019

Это артефакты сжатия, так как вы используете сжатие с потерями.Если вы хотите, чтобы ваши кадры совпадали до последнего бита, запишите их в виде последовательности файлов .PNG - они сжаты без потерь и сохраняют все.Помните, что .PNG займет гораздо больше места на жестком диске, чем сжатое видео.

...