10-битная обработка видео на Python с OpenCV

Мне нужно обработать видео с разрядностью 10 бит. Я хочу сохранить всю информацию, но OpenCV продолжает конвертировать изображения в 8 бит. Есть ли способ сохранить битовую глубину при обработке изображений?

Мой код выглядит следующим образом:

import cv2
import numpy as np

cv2.namedWindow("ROI", cv2.WINDOW_NORMAL)
video_capture = cv2.VideoCapture("Ciftci.MP4",)
video_capture.set(cv2.CAP_PROP_CONVERT_RGB, 0)
ret, frame0 = video_capture.read()
column, row, height, width = cv2.selectROI('ROI', frame0)

Но я продолжаю получать следующую ошибку:

[ WARN:[email protected]] global cap_ffmpeg_impl.hpp:1592 retrieveFrame Unknown/unsupported picture format: yuv422p10le, will be treated as 8UC1.

заранее спасибо

Может быть, вы можете поделиться ссылкой на свое видео (Google Диск, Dropbox, GitHub?), чтобы люди могли попытаться его прочитать.

Mark Setchell 07.03.2024 22:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
228
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно, установка OpenCV по умолчанию с параметрами сборки по умолчанию/ffmpeg не поддерживает этот формат/кодек (например, видео HVEC iOS и т. д.).

Выполняя быстрый поиск, я заметил эту настройку ffmpeg Chroma Subsampling. Я еще не проверял это, но подозреваю, что должно быть возможно:

  1. возьмите версию ffmpeg с этой доступной функцией
  2. соберите OpenCV из исходного кода с помощью этой версии привязок ffmpeg и Python, так что, надеюсь, cv2.VideoCapture будет поддерживать yuv422p10le.

Настройка/сборка OpenCV и его многочисленных зависимостей, в зависимости от вашей ОС, может занять некоторое время/усилия, поэтому вот еще одна идея (с двумя вариантами): создайте прототип своей идеи с помощью 10-битных данных, прежде чем тратить время на создание пользовательской сборки OpenCV Python.

Идея состоит в том, чтобы сначала преобразовать ваше видео в последовательность изображений (это может быть 16-битный PNG, вы можете использовать ffmpeg или другие инструменты). Вы можете попробовать загрузить последовательность через cv2.VideoCapture, также используя флаг cv2.CAP_IMAGES (хотя я не помню, может ли он обрабатывать 16-битные изображения по умолчанию). (Имейте в виду имя отформатированной последовательности изображений (например, img_%03d.png (что-то вроде img_001.png...). Если ваша последовательность изображений названа правильно, даже указание имени файла первого кадра может сработать (например, cv2.VideoCapture("frames/img_001.png", cv2.CAP_IMAGES)).

Если cv2.VideoCapture не обрабатывает 16-битные изображения, вы все равно сможете сохранить ссылку на Mat, которую вы загружаете через cv2.imread(), с флагом cv2.IMREAD_ANYDEPTH)

(В целях визуализации, если вы используете карту глубины, не забудьте нормализовать или изменить масштаб Mat перед cv2.imshow для удобного предварительного просмотра.)

Другие вопросы по теме