C++ 将拜耳RGGB转换为CV iplimage(RGB)

C++ 将拜耳RGGB转换为CV iplimage(RGB),c++,opencv,converter,mat,iplimage,C++,Opencv,Converter,Mat,Iplimage,目前,我正在尝试将拜耳RGGB数据转换为iplimage。 我认为cvtColor可能会工作,但它需要“mat”而不是iplimage cvtColor(img->imageData, tmpimageData, CV_BayerBG2BGR, 0); 是否有解决办法,也许您可以将拜耳RGGB转换为mat,然后将mat转换为iplimage?我真的被这个问题困住了,非常感谢您的帮助 OpenCV可以很容易地在Mat和Iplimage之间转换。 例如,如果img是IplImage*: M

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

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

是否有解决办法,也许您可以将拜耳RGGB转换为mat,然后将mat转换为iplimage?我真的被这个问题困住了,非常感谢您的帮助

OpenCV可以很容易地在Mat和Iplimage之间转换。 例如,如果
img
IplImage*

Mat m(img);
Mat result;
cvtColor(m, result, CV_BayerBG2BGR, 0);
IplImage ipl_result  = IplImage(result);

请参见和

不幸的是,我没有弄清楚为什么
cvtColor
不起作用,但我还是找到了一个用SDK将RGGB转换为RGB的原因

事实证明,我使用的matrix vision sdk提供了一个内置解决方案。 我需要做的第一件事是将
PixelFormat
更改为BayerRG8,以获得8位图像分辨率。在那之后,我通过将IDPFRGGB888PACKED写入
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];
}
for(int count\u small=0,count\u large=0;count\u large<1000;count\u small+=3,count\u large+=4)
{
dest[count_small]=源[count_large];
dest[count\u small+1]=源[count\u large+1];
dest[count\u small+2]=源[count\u large+2];
}

不干净,但它完成了任务

这很有用^^我想我可以再次使用img,不需要创建新的IplImage“ipl_结果”!