2

如何Image<Bgr, Byte> frame在内存流中将 Emgu 保存为 JPEG?

4

3 回答 3

5

您有两个选择,第一个是本机 EMGU images.save("filename"); 方法但是质量不是很好而且有损。最好的方法是使用下面的 c# 方法。

这是函数saveJpeg(SaveFile.FileName, img.ToBitmap(), 100);。基于方法 saveJpeg(string path, Bitmap img, long quality)。

using System.Drawing.Imaging;

private void saveJpeg(string path, Bitmap img, long quality)
{
    // Encoder parameter for image quality

    EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);

    // Jpeg image codec
    ImageCodecInfo jpegCodec = this.getEncoderInfo("image/jpeg");

    if (jpegCodec == null)
    return;

    EncoderParameters encoderParams = new EncoderParameters(1);
    encoderParams.Param[0] = qualityParam;

    img.Save(path, jpegCodec, encoderParams);
}

private ImageCodecInfo getEncoderInfo(string mimeType)
{
    // Get image codecs for all image formats
    ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();

    // Find the correct image codec
    for (int i = 0; i < codecs.Length; i++)
    if (codecs[i].MimeType == mimeType)
    return codecs[i];
    return null;
}

希望这可以帮助,

干杯,

克里斯

于 2012-04-17T06:04:34.263 回答
3

质量好、速度快的最快最脏的方法是:

C#

yourImage.toBitmap().Save("filename.png");

VB

YourImage.ToBitmap().Save("filename.png")
于 2012-05-22T05:43:07.377 回答
1

这里提到的所有方法都很好,但在这里我要分享另一种对我有用的快速而简短的方法。首先带上 Emgu.CV。Image<,>到 System.Drawing。图像然后使用Save方法将 JPEG 保存在 Memory Stream 中。

添加参考:

using System.Drawing.Imaging;
using System.IO;
using Emgu.CV;

键入此代码:

MemoryStream MyMemoryStream = new MemoryStream();

Image MySystemImage = MyEmguImage.ToBitmap();
MySystemImage.Save(MyMemoryStream, ImageFormat.Jpeg);

问候

于 2014-01-08T08:35:00.610 回答