2015-11-17 1 views
0

В настоящее время я пытаюсь преобразовать 8-битное Raw цветное изображение в 8-разрядный RGB. Я получаю ошибку канала, ожидая, что Байер будет 1 канал.Machine Vision 8bit Bayer RGGB для RGB в Open CV

Я использую следующий код.

if (convertBayerChckBox->Checked) 
     { 
      try{ 
       cv::Mat temp(imgOriginal.rows, imgOriginal.cols, CV_8UC3); 
       imgOriginal.copyTo(temp); 
       cv::cvtColor(temp, imgOriginal, CV_BayerRG2BGR); 
      } 
      catch (const cv::Exception& ex) 
      { 
       std::cout << "EXCEPTION: " << ex.what() << std::endl; 
       errLog << "EXCEPTION: " << ex.what() << std::endl; 
      } 
     } 

тогда я получаю следующее исключение: ИСКЛЮЧЕНИЕ: ...... \ Modules \ imgproc \ SRC \ color.cpp: 4194: ошибка: (-215) SCN == 1 & & DCN == 3 в функции сорте :: cvtColor

Я не знаю, как еще конвертировать из Bayer в RGB

+0

'demosaic()' может быть? –

+0

Я удалил ответ, так как у меня вопрос неправильный. Какой тип 'imgOriginal'? Сколько каналов? – Miki

+0

Он имеет 3 канала и считывается из AVI-видеофайла, который закодирован в 8-битном raw RGGB Bayer –

ответ

3

Вам нужно установить указатель на данные ваш ввод мата указателя назначения. Вот пример программы для преобразования вашего изображения Bayer в RGB. Здесь я использовал буфер из файла. Вы можете использовать буфер камеры. Надеюсь это поможет!

Mat mSource_Bayer(Size(m_IWidth,m_IHeight),CV_8UC1); 
Mat mSource_Bgr(Size(m_IWidth,m_IHeight),CV_8UC3); 

FILE *fp = NULL; 
uchar *imagedata = NULL; 
int framesize = m_IWidth * m_IHeight; 

//Open raw Bayer image. 
fp = fopen(FileName_S.c_str(), "rb"); 

//Memory allocation for bayer image data buffer. 
imagedata = (uchar*) malloc (sizeof(uchar) * framesize); 

//Read image data and store in buffer. 
fread(imagedata, sizeof(uchar), framesize, fp); 

mSource_Bayer.data= imagedata; 

fclose(fp); 

int Selection= m_BayerFormat.GetCurSel(); 

if(Selection==0) 
    cvtColor(mSource_Bayer, mSource_Bgr, CV_BayerBG2BGR);//Perform demosaicing process 
else if(Selection==1) 
    cvtColor(mSource_Bayer, mSource_Bgr, CV_BayerGB2BGR);//Perform demosaicing process 
else if(Selection==2) 
    cvtColor(mSource_Bayer, mSource_Bgr, CV_BayerRG2BGR);//Perform demosaicing process 
else if(Selection==3) 
    cvtColor(mSource_Bayer, mSource_Bgr, CV_BayerGR2BGR);//Perform demosaicing process 

imshow("mSource_Bgr",mSource_Bgr); 
+0

Большое спасибо, я попробую и реализую это и вернусь к вам. –

Смежные вопросы