EMGU:BayerGB 8bit to Image <bgr,byte =“”>

时间:2016-03-14 11:55:42

标签: c# opencv colors

我有一个从相机生成的字节数组。 我想将此c#数组( byte [] myBuffer )转换为Emgu BgrImage。

相机的RAW图像有2590 x 1940像素。 格式为BayerGB 8bit,因此有2590(cols)x 1940(行)x 2(byte)= 10059560字节。

我从相机中获取数据,并且我有一个包含数据的字节数组

byte[] myBuffer = myGrabberFuncion();
//myBuffer.lenght == 10059560 

现在我想将其转换为BGR图像。我想我应该使用 Emgu.CV.CvInvoke.CvtColor(SRC,DEST,COLOR_CONV,CHANN) 功能。

但我不能用byte []作为SRC参数来提供函数,因为它需要一个&#34; IInputArray&#34;。

所以我可以输入 Mat 矩阵,或图片&lt;#,#&gt;

但是我应该怎么把&#34;缓冲&#34;数据进入其中一个结构?

如果我使用Matrix< byte > Bayer = new new ecv.Matrix<byte>(rows, cols, channels)我无法设置1个频道,因为它会包含 myBuffer 的一半字节

我无法将其设置为2个频道,因为&#34;断言&#34; Opencv告诉我颜色转换CvEnum.ColorConversion.BayerGb2Bgr需要一个1通道输入图像(它告诉:OpenCV: scn == 1 && (dcn == 3 || dcn == 4)

作为一种解决方法,我尝试制作双倍宽度的图像并转换此图像,这不会产生错误,但输出图像为黑色(全零)

byte[] buffer = myGrabberFunction();

Image<Structure.Bgr, byte> lastFrameBgr = new Image<Structure.Bgr, byte>(2590, 1942);

//test with Matrix of bytes:
ecv.Matrix<byte> bayerMatrix = new ecv.Matrix<byte>(lastFrameBgr.Height, lastFrameBgr.Rows, 2);
bayerMatrix.Bytes = buffer;
ecv.CvInvoke.CvtColor(bayerMatrix, lastFrameBgr, ecv.CvEnum.ColorConversion.BayerGb2Bgr, 3);
//result in a black Image


//test with an 1 channel Byte depth image   
Image<Structure.Gray, byte> bayerGrayImage = new Image<Structure.Gray, byte>(lastFrameBgr.Width * 2, lastFrameBgr.Height);
bayerGrayImage.Bytes = buffer;
ecv.CvInvoke.CvtColor(bayerGrayImage, lastFrameBgr, ecv.CvEnum.ColorConversion.BayerGb2Bgr, 3);
//result in a black Image

我的问题: 如何在我可以用作Emgu.CV.CvInvoke.CvtColor(...)函数中的源代码中转换我的字节数组?

或者我该如何将am字节数组转换为Emgu Bgr图像?

0 个答案:

没有答案