opencv 如何将内存流中的Emgu“图像〈Bgr,Byte>帧”保存为JPEG?

zsbz8rwp  于 2023-02-13  发布在  其他
关注(0)|答案(3)|浏览(199)

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

uidvcgyl

uidvcgyl1#

您有两个选项,第一个是本地EMGU www.example.com("文件名");images.save("filename"); method however the quality is not great and lossy. The best method is to use the following c# method.
这个函数是saveJpeg(保存文件.文件名,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;
}

希望这能有所帮助,
干杯,
克里斯

u59ebvdq

u59ebvdq2#

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

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

VB语言

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

cuxqih213#

这里提到的所有方法都很好,但我在这里分享另一个快速而简短的方法,它对我很有效。首先将Emgu.CV.Image〈,〉带到System.Drawing.Image,然后使用保存方法将JPEG保存到内存流中。
增加参考文献:

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

输入此代码:

MemoryStream MyMemoryStream = new MemoryStream();

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

问候

相关问题