如何有效地从EmguCV(OpenCV)图像中获取流

如何有效地从EmguCV(OpenCV)图像中获取流,opencv,pointers,stream,unmanaged,emgucv,Opencv,Pointers,Stream,Unmanaged,Emgucv,我有一个EmguCV.Image()实例和另一个第三方API,它需要表示图像数据的Stream 我能够使用System.Drawing.Bitmap.Save将EmguCV图像转换为流,并将其传递给第三方API,但效率不高 如何尽可能准确地获取流? 此代码适用于: var image = new Image<Rgb, byte>("photo.jpg"); var bitmap = image.Bitmap// System.Drawing - this takes 108ms! u

我有一个
EmguCV.Image()
实例和另一个第三方API,它需要表示图像数据的
Stream

我能够使用
System.Drawing.Bitmap.Save
将EmguCV图像转换为流,并将其传递给第三方API,但效率不高

如何尽可能准确地获取流?

此代码适用于:

var image = new Image<Rgb, byte>("photo.jpg");
var bitmap = image.Bitmap// System.Drawing - this takes 108ms!
using (var ms = new MemoryStream())
{
   bitmap.Save(ms, ImageFormat.Bmp); //not very efficient neither
   ms.Position = 0;
   return ImageUtils.load(ms); //the 3rd party API
}
但当我尝试读取时,它抛出一个
AccessViolationException
:尝试读取或写入受保护的内存

for (int i = 0; i < length; i++)
{
   //throw AccessViolationException at random interation, e.g i==82240, 79936, etc
   unmanagedMemoryStream.ReadByte();     
}
for(int i=0;i
在这种情况下,长度是90419328,应该是正确的,因为它与image.ManagedArray.length的值相同


如何在不复制数据的情况下获取流?

好的,Image()上有byte[]类型的Bytes属性,因此答案很简单:

new MemoryStream(image.Bytes)
new MemoryStream(image.Bytes)