Захваченный кадр видео Bayer на Python

В настоящее время я получаю видеопоток с камеры, требующей демозаики. Информация о кадре - 480x640x3. dtype - это uint8

Когда я пытаюсь использовать cv2.cvtColor для преобразования из BAYER в RGB, я получаю,

error: (-215:Assertion failed) scn == 1 && (dcn == 3 || dcn == 4) in function 'cv::demosaicing'

Я не понимаю, что означает ошибка. Я использую OpenCV cvtColor как документ.

Я использую следующий код: Единственная часть, которую я продолжал пытаться, - это изменить cv2.COLOR_BayerGB2BGR

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

while True:

    _, frame = cap.read()

    processedIm = cv2.cvtColor(frame, cv2.COLOR_BayerGB2BGR)
    cv2.imshow("Main", processedIm)

    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()

Я использую OVRVision для получения изображения. Дополнительная информация о камере: [Схема обработки] (http://ovrvision.com/files/docs/index.html#gscamprop)

Как показано ниже на блок-схеме. Полученное мной изображение - это блок-схема.

Поделитесь, пожалуйста, кодом, который вы используете?

ZdaR 29.11.2018 09:57

Добавил код.

Nashnir 29.11.2018 10:21

Ошибка означает, что либо исходное изображение не имеет 1 канала, либо выходное изображение не имеет 3 или 4 каналов. Вывод генерируется автоматически и по вашему комментарию «Информация о кадре 480x640x3», изображение имеет 3 канала ... вы показываете его с помощью imshow? дает ли это неожиданные результаты?

api55 29.11.2018 11:03

Пожалуйста, проверьте количество каналов в frame с помощью print frame.shape

ZdaR 29.11.2018 11:06

@ZdaR print (frame.shape) дает (480, 640, 3)

Nashnir 29.11.2018 11:14

@ api55 Я не уверен, что вы имеете в виду, говоря, что исходное изображение не имеет 1 канала? Это стереокамера. По ссылке в основном посте есть блок-схема обработки, а также пример изображения, полученного непосредственно с камеры.

Nashnir 29.11.2018 11:16

VideoCapture подключается к камере с помощью бэкэнда (например, FFMpeg или GStreamer), и он пытается его декодировать и преобразовать в BGR, и это изображение, которое вы получаете с cap.read(). Для специальных камер это может привести к сбою или неожиданному результату. Вот почему я спрашиваю, если вы удалите инструкцию cv2.cvtColor, что вы увидите с imshow? это нормальное цветное изображение? Возможно, класс videoCapture слишком ограничен для этой задачи

api55 29.11.2018 11:26

@ api55 Изображения, которые я получаю без cv2.cvtColor: imgur.com/a/bRkfqUW

Nashnir 29.11.2018 11:31

Может информация расшифрована и она в первых 2 каналах? возможно, что-то вроде imshow("first channel", frame[:, :, 0]), imshow("second channel", frame[:, :, 1]) и imshow("third channel", frame[:, :, 2]) может дать вам представление о том, как данные были декодированы, и преобразовать их с помощью OpenCV. Я предполагаю, что один канал будет в основном черным, а два других будут тем же изображением с небольшой разницей в сдвиге.

api55 29.11.2018 11:56

@ api55 Вот данные разделения канала вместе с исходным кадром. imgur.com/a/dCCupZt

Nashnir 29.11.2018 12:15

У меня нет идей, но, возможно, вы можете использовать ffmpeg или gstreamer напрямую, чтобы получить необработанные данные

api55 29.11.2018 12:43

вам следует использовать SDK и / или посмотреть "examples / 3rdparty /: Другие библиотеки, которые используются с примерами"

Micka 29.11.2018 21:57

Можете ли вы попробовать разделить каналы изображений (cv :: split) и запустить демозаику на обоих каналах по отдельности?

Micka 29.11.2018 22:00
Почему в 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
13
738
0

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