图片编码

功能介绍

将接口输出的Image对象编码为JPG格式的图片内存或保存到指定的图片路径。

接口说明请参考Encode

接口调用流程

用户需提前准备好待编码的Image对象,可以通过图片解码以及图像处理接口(抠图、缩放、补边等操作对应接口)输出,输出到本地图片或者内存中。

图片编码调用流程参考如下:

图1 图片编码接口调用流程

关键步骤说明如下:

  1. 调用MxInit()接口进行全局初始化。
  2. ImageProcessor构造及初始化。

    用户构造ImageProcessor对象,之后可以调用InitJpegEncodeChannel()初始化通道,若不调用该接口,ImageProcessor会在执行编码前自动进行通道初始化。

  3. 使用图片解码接口对输入图片进行解码。

    根据业务对图片进行解码,生成可编码的Image对象。后续可以通过图像处理接口对图片进行处理,生成最终需要编码的Image对象。

  4. 调用Encode()接口对输入图片进行编码。

    用户需根据实际业务情况输出图片数据,选择输出到文件输出到内存

  5. 调用MxDeInit()接口对初始化的全局资源进行去初始化。

示例代码

以下为功能特性关键步骤的代码示例,不可以直接拷贝编译运行,仅供参考。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//初始化
MxInit();
{
    //构造图像处理类
    ImageProcessor imageProcessor(deviceId);

    //图像解码/图像处理操作生成Image
    //解码后的图像类
    Image decodedImage;
    //根据图像路径进行解码
    APP_ERROR ret = imageProcessor.Decode(imagePath, decodedImage);
    if (ret != APP_ERR_OK) {
        std::cout << "Decode failed." << std::endl;
    }
    //图像处理操作后图像类
    Image resizedImage;
    //图像处理操作(缩放)
    ret = imageProcessor.Resize(decodedImage, Size(416, 416), resizedImage, Interpolation::HUAWEI_HIGH_ORDER_FILTER);
    if (ret != APP_ERR_OK) {
        std::cout << "Resize failed." << std::endl;
    }

    //(可选)初始化编码通道JpegEncodeChnConfig jpegEncodeChnConfig;
    JpegEncodeChnConfig.maxPicWidth = 4096;
    JpegEncodeChnConfig.maxPicHeight = 4096;
    imageProcessor.InitJpegEncodeChannel(JpegEncodeChnConfig);

    //图像编码
    ret = imageProcessor.Encode(resizedImage,"encode.jpg");
    if (ret != APP_ERR_OK) {
        std::cout << "Encode failed." << std::endl;
    }
}
//去初始化
MxDeInit();