как захватить видео с четырьмя каналами (RGB-IR) в open cv?

#python #opencv

#python #opencv

Вопрос:

Кто-нибудь знает, как использовать четыре канала в open cv. У меня есть эта rgb-ИК-камера от e con systems (См. 3cam_cu40), и я попытался написать приведенный ниже код обычным способом. Это дает только полное черное видео. Я думаю, это потому, что opencv изначально запрашивает gbr. Но я не знаю, что делать, когда видеопоток имеет 4 канала.

 import cv2
def main():

     windowName1 =" LIve video Feed"

     cv2.namedWindow(windowName1)

     cap=cv2.VideoCapture(1) 
     # cap.set(cv2.CAP_PROP_EXPOSURE,-1)
     cap.set(cv2.CAP_FFMPEG,True)
     cap.set(cv2.CAP_PROP_FPS,30)

     if cap.isOpened():
         ret,frame = cap.read()

     else:
         ret=False
     while ret:
         ret,frame =cap.read()
    #     r,g,b =cv2.split(frame)
    #     output = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)


         cv2.imshow(windowName1,frame)
         if cv2.waitKey(1) ==27:
             break

     #cv2.destroyWindow(windowName)
     cv2.destroyAllWindows()


     cap.release()

if __name__ == '__main__':
    main()
 

Комментарии:

1. Проверьте наличие кадра, если он пуст, чтение не удалось. В противном случае API может не поддерживаться OCV. Последнее может быть более вероятным. В этом случае вам нужно будет установить API для вашей камеры и создать оболочку, которая преобразует необработанные данные с камеры в cv::Mat

2. ПРИВЕТ @Croolman, большое тебе спасибо. Я искал на веб-сайте поставщика камеры. Они предоставляют некоторый исходный код и заголовочные файлы, но все они на C. Я разработал свой код на python и на самом деле не хочу переключаться на C. Итак, прямо сейчас я не знаю, как преобразовать строки кода, такие как follow, в python. #включить «opencv2 / video / tracking.hpp» # включить «opencv2 / imgproc / imgproc.hpp» # включить «opencv2 / highgui / highgui.hpp» Любая помощь действительно ценится. Спасибо!

3. Я нашел решение по этой ссылке. gist.github.com/bhive01/… See3cam не предоставляет никаких руководств по его использованию на python. Я надеюсь, что это поможет кому-то в будущем.

Ответ №1:

Вам нужно добавить приведенное ниже преобразование, чтобы разделить RGB и IR отдельно. Также вам необходимо установить VideoCapture_Object.set(CV_CAP_PROP_CONVERT_RGB, false); после открытия видеоузла, чтобы получить необработанное изображение Y16 версии OpenCV 3.3 и выше. В приведенной ниже версии OpenCV 3.3 Y16 по умолчанию не поддерживается.

/***************************************************************************/

// Преобразовать в 8 бит:
// Масштабировать 10 бит (1024) пикселей в 8 бит (255) (255/1024) = 0,249023
convertScaleAbs(inputImage, BayerFrame8, 0,249023);

//Заполнение недостающего G-канала bayer data
ConvertRGIR2RGGB(BayerFrame8, BayerFrame8, IRImage);

// Фактический формат Bayer BG, но Opencv использует BGR, а не RGB, поэтому принимает формат RG Bayer
cvtColor (BayerFrame8, BGRImage, COLOR_BayerRG2BGR);

namedWindow(«Рамка камеры BGR», WINDOW_AUTOSIZE);
imshow(«Рамка камеры BGR», BGRImage);

namedWindow(«ИК-рамка камеры», WINDOW_AUTOSIZE);
imshow(«ИК-рамка камеры», IRImage);

/*****************************************************************************/

// Фактический формат данных BGIRR после преобразования BGGR — IR заменяется на G
// ИК-данные собираются в виде отдельного изображения
bool ConvertRGIR2RGGB(Mat BayerRGIR, Mat amp; BayerRGGB, Mat amp;IRimage)
{
// Результирующее изображение после замены ИК-пикселя данными G
BayerRGGB = BayerRGIR.clone();

// IR данные будут вдвое меньше размера изображения
Bayer IRimage = Mat(BayerRGIR.size().height / 2, BayerRGIR.size().width / 2, CV_8UC1);

//копирование ИК-данных и замена ИК-данных на G
для (int Row = 0; Row < BayerRGIR.rows; Row = 2)
{
for (int Col = 0; Col < BayerRGIR.cols; Col = 2)
{
//Установите ИК-данные с соседним зеленым
BayerRGGB.at(строка 1, Col) = BayerRGIR.at (Строка, Col 1);
//Установка ИК-данных
IRimage.at (Строка / 2, Col / 2) = BayerRGIR.at (Строка 1, Col);
}
}

возвращает true;
}

/********************************************************************************/