Извлечение Y, Cb, Cr из Mat в C++ и создание Mat только со значениями Y
У меня есть два видео, которые я хочу соединить. Я планирую снимать видео в видимом свете, захватывать кадры и конвертировать кадры в YUV. Прежде чем смешать это с ИК-видео, я хочу извлечь компонент Y, поместить его в другое изображение (переменную) типа Mat такого же размера и объединить его с яркостью ИК-кадра. После слияния я хочу вернуть Cb и Cr, чтобы получить цвета.
Я видел эту ссылку: Получение значений Y и Cb, Cr фрейма в openCV C++
Но я не мог понять, как я могу создать свои собственные матрицы с этим методом извлечения Y, Cb и Cr.
Есть идеи, как я могу это сделать?
1 ответ
Решение
Посмотрите на split() и объедините
Mat vis_img; // from cam
Mat ycrcb;
cvtColor( vis_img, ycrcb, CV_BGR2YCRCB ); // am i right assuming rgb input even ?
Mat channels[3];
split( ycrcb, channels );
// y is channels[0], cb is channels[1], cr, well...
// some operations on channels later..
// once you 'fused' your luminance channels into one, you can re-assemble the image
// from the channels:
Mat new_channels[3] = { lum_fused, channels[1], channels[2] };
Mat new_ycrcb;
merge( new_channels, new_ycrcb, 3 );