как захватить видео с четырьмя каналами (RGB-IR) в открытом cv? - PullRequest
0 голосов
/ 18 апреля 2019

Кто-нибудь знает, как использовать четыре канала в открытом резюме. У меня есть эта RGB-ИК-камера от e con systems (See3CAM_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 Ответ

0 голосов
/ 15 мая 2019

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


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

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

// Заполнение пропущенных данных байера G-канала
ConvertRGIR2RGGB (BayerFrame8, BayerFrame8, IRImage);

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

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

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

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

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

// ИК-данные будут вдвое меньше, чем Bayer Image
IRimage = Mat (BayerRGIR.size (). Height / 2, BayerRGIR.size (). Width / 2, CV_8UC1);

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

вернуть true;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...