抠图缩放

功能介绍

对输入的图像进行抠图并缩放操作,输出到Tensor对象中。

接口说明请参考CropResize

接口调用流程

使用抠图缩放接口前,用户需准备好被抠图缩放的图片,并转换到Tensor对象中。

图1 张量方法(抠图缩放)接口调用流程

关键步骤说明如下:

  1. 调用MxInit()接口进行全局初始化。
  2. 构造抠图缩放参数和输出Tensor。

    根据业务要求,构造对应的输入的Rect、Size和输出的Tensor。

  3. 选择执行方式进行抠图缩放,请根据实际业务选择同步方式或异步方式。
    1. 同步执行。
      1. 不创建Stream,将输入图片及其他参数传入CropResize方法,获取抠图缩放结果。
    2. 异步执行。
      1. 创建Stream,具体请参见异步调用
      2. 将输入图片、已创建的Stream及其他参数传入CropResize方法,获取抠图缩放结果。
  4. 调用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
//初始化
MxBase::MxInit();

{
    // 读取图片
    std::string imgPath = "./test.jpg";
    cv::Mat imgData = cv::imread(imgPath, cv::IMREAD_UNCHANGED);
    std::vector<uint32_t> shape{600, 600, 3};

    // 构造输入tensor
    MxBase::Tensor input(imgData.data, shape, MxBase::TensorDType::UINT8, -1);
    input.ToDvpp(0);

    // 设置抠图区域及缩放宽高
    MxBase::Rect rect(0, 0, 320, 320);
    std::vector<MxBase::Rect> cropRectVec = {rect};
    MxBase::Size size(480, 480);
    std::vector<MxBase::Size>sizeVec = {size};

    // 构造输出tensor
    std::vector<uint32_t> dstShape = {480, 480, 3};
    MxBase::Tensor dst(dstShape, MxBase::TensorDType::UINT8, -1);
    dst.Malloc();
    dst.ToDvpp(0);
    std::vector<MxBase::Tensor> outputTensorVec = {dst};

    // 执行抠图缩放操作
    APP_ERROR ret = MxBase::CropResize(input, cropRectVec, sizeVec, outputTensorVec, MxBase::Interpolation::BILINEAR_SIMILAR_OPENCV, true);
    if (ret != APP_ERR_OK) {
        std::cout << "CropResize failed." << std::endl;
    }
}

//去初始化
MxBase::MxDeInit();