Изображение CV2 в видео изменяет значения RGB

Я пытаюсь записать jpg в видео, используя cv2. Я определяю фиктивное изображение как таковое:

fake_image = np.array([[[122, 131, 140]] * 416] * 416).astype(np.uint8)

Затем я записываю это в видео, используя:

out = cv2.VideoWriter('mock_video.mp4',cv2.VideoWriter_fourcc(*'DIVX'), 1, (416, 416))
out.write(fake_image)
out.release()

Затем я пытаюсь прочитать кадры своего видео:

vid = cv2.VideoCapture('mock_video.mp4')
return_value, frame = vid.read()

И теперь значения RGB изменились! Вместо того, чтобы быть [122, 131, 140], теперь им [118, 129, 137]!

Почему это происходит и можно ли это предотвратить?

Редактировать: да, я знаю, что cv2 использует BGR, это не то, что происходит (это не тот случай, когда порядок каналов обратный)


person hchw    schedule 15.10.2019    source источник
comment
^ это не то, что происходит... пожалуйста, прочитайте вопрос :/   -  person hchw    schedule 15.10.2019
comment
mp4 аналогично jpg изменяет пиксели для лучшего сжатия. Для изображений вы можете использовать .png, но для видео это может быть не лучшим решением.   -  person furas    schedule 15.10.2019
comment
в Википедии вы можете увидеть список видеокодеков без потерь, и вам нужно будет проверить cv2 документацию, если он может использовать некоторые из этих кодеков.   -  person furas    schedule 15.10.2019
comment
Используя Google, я нашел: сжатие без потерь для видео в opencv и Как записать видео без потерь на Python   -  person furas    schedule 15.10.2019