Вам нужно добавить приведенное ниже преобразование, чтобы разделить 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;
}
/ ************************************************* ******************************* /