c++ - 机器视觉 8 位 Bayer RGGB 到 Opencv 中的 RGB

标签 c++ opencv

我目前正在尝试将 8 位 Raw 彩色图像转换为 8 位 RGB。 我收到一个 channel 错误,它希望拜耳成为 1 个 channel 。

我正在使用以下代码。

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 函数 cv::cvtColor

我不确定如何从 Bayer 转换为 RGB

最佳答案

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

关于c++ - 机器视觉 8 位 Bayer RGGB 到 Opencv 中的 RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33756723/

相关文章:

c++ - 将两个缓冲区合并为 Win32 管道上的单个写入

macos - 在 OSX 上的 QT 中设置 OpenCV

python - 如何提高表面缺陷的检测?

python - 预处理扫描不良的手写数字

c++ - Cython 代码可以编译成 dll 以便 C++ 应用程序可以调用它吗?

c++ - 您如何在非模板类中专门化没有参数的模板方法?

python - 我在Python中使用OpenCV尝试了此代码,但我不理解错误消息

opencv - Viola Jones 面部检测 - 对象/面部大小的变化

c++ - Opus 中的 "useinbandfec is a unidirectional receive-only parameter"是什么意思?

c++ - 将右值传递给可能不使用它的函数