Как конвертировать изображение из мозаики Байера? (OpenCV C++)
У меня возникли некоторые проблемы с демозаизацией мозаики Байера (Байеровский фильтр) (OpenCV C++). Мне нужно преобразовать изображение из мозаики Байера в нормальное изображение.
Я попытался использовать cv::cvtColor
с cv::COLOR_BayerGB2BGR
, но выходное изображение получается "зеленым", и я не понимаю почему. Я также пытался каким-то образом использовать cv::demosaicing
для билинейной интерполяции, но это тоже не помогло. Я знаю, что выходное изображение должно быть в два раза меньше входного, потому что мы должны получить 1 пиксель из 4, но я не понимаю, как это правильно реализовать...
#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);
}
Источник: Stack Overflow на русском