如何将内存流中的Emgu"图像<Bgr,字节>帧"保存为JPEG?



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

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

这是函数是saveJpeg(SaveFile.FileName,img。ToBitmap(), 100);.基于方法saveJpeg(字符串路径,位图图像,长质量)。

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;
}

希望这有帮助,

干杯

克里斯

质量和

高速的最快和最肮脏的方式是:

C#

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

.VB

YourImage.ToBitmap().Save("filename.png")

这里提到的所有方法都很好,但在这里我分享另一种对我有用的快速而简短的方法。先带上 Emgu.CV。图像<,>到系统绘图。然后使用保存方法将 JPEG 保存在内存流中。

添加引用:

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

键入此代码:

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

问候

最新更新