我有一个从相机生成的字节数组。 我想将此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参数来提供函数,因为它需要一个" IInputArray"。
所以我可以输入 Mat ,矩阵,或图片<#,#>
但是我应该怎么把"缓冲"数据进入其中一个结构?
如果我使用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图像?