Как конвертировать изображение из мозаики Байера? (OpenCV C++)

Рейтинг: 1Ответов: 0Опубликовано: 04.06.2023

У меня возникли некоторые проблемы с демозаизацией мозаики Байера (Байеровский фильтр) (OpenCV C++). Мне нужно преобразовать изображение из мозаики Байера в нормальное изображение.

Я попытался использовать cv::cvtColor с cv::COLOR_BayerGB2BGR, но выходное изображение получается "зеленым", и я не понимаю почему. Я также пытался каким-то образом использовать cv::demosaicing для билинейной интерполяции, но это тоже не помогло. Я знаю, что выходное изображение должно быть в два раза меньше входного, потому что мы должны получить 1 пиксель из 4, но я не понимаю, как это правильно реализовать...

Upd: Пример ввода-вывода: Пример ввода Пример вывода

#include <opencv2/opencv.hpp>

int main()
{
    cv::Mat bayer_img = cv::imread("bayer_image2.png", cv::IMREAD_GRAYSCALE);
    cv::Mat rgb_img;

    cv::cvtColor(bayer_img, rgb_img, cv::COLOR_BayerGBRG2BGR);

    cv::Mat demosaiced_img;
    cv::cvtColor(rgb_img, demosaiced_img, cv::COLOR_BGR2RGB);

    cv::Mat resized_img;
    cv::resize(demosaiced_img, resized_img, cv::Size(), 0.5, 0.5);
    
    cv::imwrite("bayer_image_output.png", resized_img);
}

Ответы

Ответов пока нет.