在我的代码中,我从一个字节数组(依次从Kinect)接收WriteableBitmaps,我想把它们变成用于EmguCV的位图。目前这是我的代码:
// Copy the pixel data from the image to a temporary array
colorFrame.CopyPixelDataTo(this.colorPixels);
// Write the pixel data into our bitmap
this.colorBitmap.WritePixels(
new Int32Rect(0, 0, this.colorBitmap.PixelWidth, this.colorBitmap.PixelHeight),
this.colorPixels,
this.colorBitmap.PixelWidth * colorFrame.BytesPerPixel,
0);
BitmapEncoder encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(colorBitmap));
MemoryStream ms = new MemoryStream();
encoder.Save(ms);
Bitmap b=new Bitmap(ms);
Image<Gray, Byte> img = new Image<Gray, Byte>(b);
img = img.ThresholdBinary(new Gray(200), new Gray(255));
我从here获得了代码的下半部分。代码编译和所有内容,但是在我尝试运行程序时挂起(它应该对图像执行某些操作然后将其转换回来)可以显示为图像的格式。)暂停我的代码,然后在VS 2013中使用IntelliTrace,我在Image<Gray, Byte> img = new Image<Gray, Byte>(b);
得到以下异常“抛出了System.ArgumentException:不支持URI格式。”使用替代代码,从我直接从字节到位图的位置给出了同样的错误。 (Code can be found here.)
任何人都有关于如何解决此错误或其他方法转换为位图的提示?我是C#&amp; amp;的新手EmguCV和我非常感激。
答案 0 :(得分:0)
原来所有代码都没问题。我对错误的技术细节不太确定,但是当尝试在WriteableBitmap中编写Gray16图像时会收到错误(将被转换为Emgu图像。)支持Bgr565或其他格式,我相信Gray没有完全实现Gray16。如果在运行WinForms应用程序时,Format16bppGray也会出现同样的错误。
我决定使用Grey Emgu图像,同时将Bitmap写为Bgr555,这是一个更嘈杂,但总比没有好的。
答案 1 :(得分:0)
我有同样的问题。不支持&#34; URI格式的例外&#34;与位图无关,但需要加载opencv dll。我刚刚将x86和x64文件夹(包括opencv_core290.dll和其他文件夹)复制到我的可执行文件目录中。