【发布时间】:2017-02-08 20:32:47
【问题描述】:
我目前正在使用 C# 和 EmguCV (OpenCV) 并希望使用当前由 Mat 类表示的 JPEG/PNG 压缩/解压缩图像。我不想将它存储在磁盘上,只需将其压缩到内存中。目标是稍后通过 TCP/IP 传输。
高度赞赏以下任务的一些代码 sn-p:
A. Compress: Mat -> JPEG/PNG compressed byte[]
B. Decompress: JPEG/PNG compressed byte[] -> Mat
【问题讨论】:
-
我没有使用过 EmguCV,但是查看文档,您的 Mat 对象似乎具有 Bitmap 属性。您可以在 Bitmap 上调用 Save 以将其直接序列化为流(例如 MemoryStream)以获得原始字节。保存功能允许您指定格式(允许使用 png 和 jpg)。反过来,你可以调用 System.Drawing.Image.FromStream() 来直接从内存中加载位图。
-
@RogerN:看起来很有希望!我将尝试这种方法并报告我的结果。非常感谢您的帮助!
-
这些格式只有在存储在文件中时才会被压缩。加载图像的目的是尽可能快地完成下一步操作。内存很便宜。您可以任意使用 Image.Save() 将其存储在 MemoryStream 中。
-
OpenCV 有“imdecode”和“imencode”正是为此。 emgucv 可能也有它们
-
是的,“imencode”和“imdecode”可用作 CvInvoke 类的静态成员。到目前为止,谢谢,我会尝试这两种方法并在这里发布一些结果。
标签: c# stream compression jpeg emgucv