将Bayer RGGB转换为CV iplimage(RGB)

时间:2014-01-07 17:51:11

标签: c++ opencv converter mat iplimage

目前我正在尝试将Bayer RGGB数据转换为iplimage。 我认为cvtColor可能会工作但它需要“mat”而不是iplimage。

cvtColor(img->imageData, tmpimageData, CV_BayerBG2BGR, 0); 

是否有解决方法,也许您可​​以将Bayer RGGB转换为mat然后将mat转换为iplimage?我真的很困惑这个问题,非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

OpenCV可以轻松地在Mat和Iplimage之间进行转换。 例如,如果imgIplImage*

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()

答案 1 :(得分:0)

不幸的是我没弄清楚为什么cvtColor不起作用,但我发现了为什么要用我的SDK将BayerRGGB转换为RGB。

事实证明,我正在使用的矩阵视觉sdk提供了一个内置的解决方案。 我需要做的第一件事是将PixelFormat更改为BayerRG8以获得8位图像分辨率。之后,我设法通过将idpfRGB888Packed写入ImageDestination.pixelFormat将Bayer RGGB解码为RGB。

此外,我能够以非常原始的方式进行转换,这也完成了工作,但需要太多的CPU时间。 我循环了我的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];
}

不干净但完成了工作。