Я пытаюсь записать 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, это не то, что происходит (это не тот случай, когда порядок каналов обратный)
mp4
аналогичноjpg
изменяет пиксели для лучшего сжатия. Для изображений вы можете использовать.png
, но для видео это может быть не лучшим решением. - person furas   schedule 15.10.2019cv2
документацию, если он может использовать некоторые из этих кодеков. - person furas   schedule 15.10.2019