机器视觉8位拜耳RGGB到RGB的开放式CV

时间:2015-11-17 12:17:45

标签: c++ opencv

我目前正在尝试将8位原始彩色图像转换为8位RGB。 我得到一个频道错误,它希望拜耳是一个频道。

我正在使用以下代码。

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;
            }
        }

然后我得到以下异常: EXCEPTION:...... \ modules \ imgproc \ src \ color.cpp:4194:错误:( - 1515)scn == 1&amp;&amp;函数cv :: cvtColor中的dcn == 3

我不确定如何将拜耳转换为RGB

2 个答案:

答案 0 :(得分:3)

您需要将输入Mat的数据指针设置为目标指针。 这是一个将拜耳图像转换为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);

答案 1 :(得分:0)

此外,为了执行从BAYER到RGB的转换,我建议使用SimdBayerToBgr中的函数Simd Library。看来它的功能要比OpenCV(使用AVX2和AVX-512)的同类产品要快。

相关问题