В настоящее время я пытаюсь преобразовать данные Bayer RGGB в изображение.
Я думал, что cvtColor может работать, но он требует «мат» вместо iplimage.
cvtColor(img->imageData, tmpimageData, CV_BayerBG2BGR, 0);
Есть ли обходной путь, может быть, вы можете конвертировать Bayer RGGB в мат, а затем конвертировать мат в iplimage? Я действительно застрял с этой проблемой, любая помощь с благодарностью!
OpenCV может легко конвертировать между Mat и Iplimage.
Например, если img
является IplImage*
:
Mat m(img);
Mat result;
cvtColor(m, result, CV_BayerBG2BGR, 0);
IplImage ipl_result = IplImage(result);
Увидеть Mat :: Mat (const IplImage * img, bool copyData = false) а также Mat :: operator IplImage ()
К сожалению, я не понял, почему cvtColor
не работал, но тем не менее я нашел причину конвертировать BayerRGGB в RGB с моим SDK.
Выяснилось, что sdk matrix-vision, с которой я работал, предоставляет встроенное решение.
Первое, что мне нужно было сделать, это изменить PixelFormat
в BayerRG8, чтобы получить разрешение изображения 8 бит. После этого мне удалось декодировать Bayer RGGB в RGB, написав idpfRGB888, упакованный в ImageDestination.pixelFormat
,
Кроме того, я смог сделать свое преобразование очень примитивным способом, который также выполнил работу, но потребовал слишком много процессорного времени.
Я зациклился imageData
массив и вынул каждый четвертый пиксель.
for (int count_small = 0, count_large = 0; count_large < 1000; count_small += 3, count_large +=4)
{
dest[count_small] = source[count_large];
dest[count_small+1] = source[count_large+1];
dest[count_small+2] = source[count_large+2];
}
Не чистый, но он сделал свою работу.