如何将内存流中的Emgu`Image <bgr,byte =“”> frame`保存为JPEG?</bgr,>

时间:2012-04-16 13:51:48

标签: opencv computer-vision emgucv opencvdotnet

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

3 个答案:

答案 0 :(得分:5)

你有两个选择,第一个是原生的EMGU images.save(“filename”);但是方法质量不是很好而且有损。最好的方法是使用以下c#方法。

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

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

希望这有帮助,

干杯,

克里斯

答案 1 :(得分:1)

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

C#

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

VB

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

答案 2 :(得分:1)

这里提到的所有方法都很好但是我在这里分享另一个快速而简短的方法,对我有用。首先将Emgu.CV. 图像&lt;,&gt; 带到System.Drawing。图像然后使用保存方法将JPEG保存在内存流中

添加引用:

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

输入以下代码:

MemoryStream MyMemoryStream = new MemoryStream();

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

此致