目前我正在尝试将Bayer RGGB数据转换为iplimage。 我认为cvtColor可能会工作但它需要“mat”而不是iplimage。
cvtColor(img->imageData, tmpimageData, CV_BayerBG2BGR, 0);
是否有解决方法,也许您可以将Bayer RGGB转换为mat然后将mat转换为iplimage?我真的很困惑这个问题,非常感谢任何帮助!
答案 0 :(得分:1)
OpenCV可以轻松地在Mat和Iplimage之间进行转换。
例如,如果img
是IplImage*
:
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];
}
不干净但完成了工作。