从 png 字节获取 EMGU 图像
Getting EMGU Image from png bytes
我正在尝试从 png 字节中获取 Image
。
在下面的示例中,我能够从文件中加载 png,但不能从文件的字节中加载:
//using Emgu.CV;
//using Emgu.CV.Structure;
var path = @"C:\path\to\my.png";
// Using the constructor with the file path works great!
var imageFromFile = new Image<Rgb, byte>(path);
var bytes = File.ReadAllBytes(path);
var size = imageFromFile.Size;
var imageFromBytes = new Image<Rgb, byte>(size);
// Assigning the bytes ails with an 'ArgumentOutOfRangeException' exception
imageFromBytes.Bytes = bytes;
这实际上是有道理的,因为 imageFromBytes.Bytes
需要一个大小为:
的数组
size.Width * size.Height * 3
而字节数组具有压缩后的 png 图像的大小。
所以,我的问题是 - 给定一个 png 字节数组,我怎样才能得到这些字节的图像实例?
在Emgu github repo中稍作探索后,下面将从字节数组中获取图像。
不是这样 OOP-ish,但有效...
var imageFromBytes = new Image<Rgb, byte>(imageFromFile.Size);
CvInvoke.Imdecode(bytes, Emgu.CV.CvEnum.ImreadModes.AnyColor, imageFromBytes.Mat);
// Now imageFromBytes holds the uncompressed bytes.
我正在尝试从 png 字节中获取 Image
。
在下面的示例中,我能够从文件中加载 png,但不能从文件的字节中加载:
//using Emgu.CV;
//using Emgu.CV.Structure;
var path = @"C:\path\to\my.png";
// Using the constructor with the file path works great!
var imageFromFile = new Image<Rgb, byte>(path);
var bytes = File.ReadAllBytes(path);
var size = imageFromFile.Size;
var imageFromBytes = new Image<Rgb, byte>(size);
// Assigning the bytes ails with an 'ArgumentOutOfRangeException' exception
imageFromBytes.Bytes = bytes;
这实际上是有道理的,因为 imageFromBytes.Bytes
需要一个大小为:
size.Width * size.Height * 3
而字节数组具有压缩后的 png 图像的大小。
所以,我的问题是 - 给定一个 png 字节数组,我怎样才能得到这些字节的图像实例?
在Emgu github repo中稍作探索后,下面将从字节数组中获取图像。
不是这样 OOP-ish,但有效...
var imageFromBytes = new Image<Rgb, byte>(imageFromFile.Size);
CvInvoke.Imdecode(bytes, Emgu.CV.CvEnum.ImreadModes.AnyColor, imageFromBytes.Mat);
// Now imageFromBytes holds the uncompressed bytes.