缩放
图片编码
功能介绍
将接口输出的Image对象编码为JPG格式的图片内存或保存到指定的图片路径。
接口调用流程
用户需提前准备好待编码的Image对象,可以通过图片解码以及图像处理接口(抠图、缩放、补边等操作对应接口)输出,输出到本地图片或者内存中。
图片编码调用流程参考如下:
图1 图片编码接口调用流程

关键步骤说明如下:
-
调用MxInit()接口进行全局初始化。
-
ImageProcessor构造及初始化。
用户构造ImageProcessor对象,之后可以调用InitJpegEncodeChannel()初始化通道,若不调用该接口,ImageProcessor会在执行编码前自动进行通道初始化。
-
使用图片解码接口对输入图片进行解码。
根据业务对图片进行解码,生成可编码的Image对象。后续可以通过图像处理接口对图片进行处理,生成最终需要编码的Image对象。
-
调用Encode()接口对输入图片进行编码。
用户需根据实际业务情况输出图片数据,选择输出到文件或输出到内存。
-
调用MxDeInit()接口对初始化的全局资源进行去初始化。
示例代码
以下为功能特性关键步骤的代码示例,不可以直接拷贝编译运行,仅供参考。
//初始化
MxInit();
{
//构造图像处理类
ImageProcessor imageProcessor(deviceId);
//图像解码/图像处理操作生成Image
//解码后的图像类
Image decodedImage;
//根据图像路径进行解码
APP_ERROR ret = imageProcessor.Decode(imagePath, decodedImage);
if (ret != APP_ERR_OK) {
return 0;
}
//图像处理操作后图像类
Image resizedImage;
//图像处理操作(缩放)
ret = imageProcessor.Resize(decodedImage, Size(416, 416), resizedImage, Interpolation::HUAWEI_HIGH_ORDER_FILTER);
if (ret != APP_ERR_OK) {
return 0;
}
//(可选)初始化编码通道JpegEncodeChnConfig jpegEncodeChnConfig;
JpegEncodeChnConfig.maxPicWidth = 4096;
JpegEncodeChnConfig.maxPicHeight = 4096;
imageProcessor.InitJpegEncodeChannel(JpegEncodeChnConfig);
//图像编码
ret = imageProcessor.Encode(resizedImage,"encode.jpg");
if (ret != APP_ERR_OK) {
return 0;
}
}
//去初始化
MxDeInit();
父主题: 通过接口进行图像处理(Image)
抠图
功能介绍
对输入的图像进行抠图操作,输出到Image对象中。
接口调用流程
使用抠图接口前,用户需准备好被抠图的图片对象。
图1 图像处理(抠图)接口调用流程

关键步骤说明如下:
-
调用MxInit()接口进行全局初始化。
-
ImageProcessor初始化。
用户构造ImageProcessor对象,之后可以调用InitVpcChannel()初始化通道,若不调用该接口,ImageProcessor会在执行抠图前自动进行通道初始化。
-
使用图片解码接口对输入图片进行解码。
根据业务对图片进行解码,生成可抠图的Image对象。后续可以通过图像处理接口对图片进行处理,生成最终需要抠图的Image对象。
-
构造抠图Rect以及输出Image。
根据业务要求,选择一对多、一对一或多对多的抠图方式,构造对应的输入和输出Rect和Image。
-
选择执行方式进行抠图,请根据实际业务选择同步抠图方式或异步抠图方式。
-
调用MxDeInit()接口对初始化的全局资源进行去初始化。
示例代码
以下为功能特性关键步骤的代码示例,不可以直接拷贝编译运行,仅供参考。
//初始化
MxInit();
{
//构造图像处理类
ImageProcessor imageProcessor(deviceId);
//(可选)初始化图像处理通道
imageProcessor.InitVpcChannel();
//图像解码操作生成Image
//解码后的图像类
Image decodedImage;
//根据图像路径进行解码
APP_ERROR ret = imageProcessor.Decode(imagePath, decodedImage);
if (ret != APP_ERR_OK) {
return 0;
}
//执行Crop
//抠图图像类
Image cropImage;
//抠图坐标信息
Rect cropRect {0, 0, 640, 512};
//抠图操作
ret = imageProcessor.Crop(decodeImage, cropRect, cropImage);
if (ret != APP_ERR_OK) {
return 0;
}
}
//去初始化
MxDeInit();
父主题: 通过接口进行图像处理(Image)
缩放
功能介绍
对输入的图像进行缩放操作,输出到Image对象中。
接口调用流程
使用缩放接口前,用户需准备好被缩放的图片对象。
图1 图像处理(缩放)接口调用流程

关键步骤说明如下:
-
调用MxInit()接口进行全局初始化。
-
ImageProcessor初始化。
用户构造ImageProcessor对象,之后可以调用InitVpcChannel()初始化通道,若不调用该接口,ImageProcessor会在执行缩放前自动进行通道初始化。
-
使用图片解码接口对输入图片进行解码。
根据业务对图片进行解码,生成可缩放的Image对象。后续可以通过图像处理接口对图片进行处理,生成最终需要缩放的Image对象。
-
构造缩放参数和输出Image。
根据业务要求,构造对应的输入和输出Size和Image。
-
选择执行方式进行抠图。
-
调用MxDeInit()接口对初始化的全局资源进行去初始化。
示例代码
以下为功能特性关键步骤的代码示例,不可以直接拷贝编译运行,仅供参考。
//初始化
MxInit();
{
//构造图像处理类
ImageProcessor imageProcessor(deviceId);
//图像解码生成Image
//解码后的图像类
Image decodedImage;
//根据图像路径进行解码
APP_ERROR ret = imageProcessor.Decode(imagePath, decodedImage);
if (ret != APP_ERR_OK) {
return 0;
}
//(可选)初始化图像处理通道
imageProcessor.InitVpcChannel();
//执行缩放
//缩放操作后图像类
Image resizedImage;
//缩放尺寸
Size size(416, 416);
//缩放操作
ret = imageProcessor.Resize(decodedImage, size, resizedImage, Interpolation::HUAWEI_HIGH_ORDER_FILTER);
if (ret != APP_ERR_OK) {
return 0;
}
}
//去初始化
MxDeInit();
父主题: 通过接口进行图像处理(Image)
补边
功能介绍
对输入的图像进行补边操作,输出到Image对象中。
接口调用流程
使用补边接口前,用户需准备好被补边的图片对象。
图1 图像处理(补边)接口调用流程

关键步骤说明如下:
-
调用MxInit()接口进行全局初始化。
-
ImageProcessor初始化。
用户构造ImageProcessor对象,之后可以调用InitVpcChannel()初始化通道,若不调用该接口,ImageProcessor会在执行补边前自动进行通道初始化。
-
使用图片解码接口对输入图片进行解码。
根据业务对图片进行解码,生成可补边的Image对象。后续可以通过图像处理接口对图片进行处理,生成最终需要补边的Image对象。
-
构造补边参数。
根据业务要求,构造对应的输入的“padDim”(表示补边上下左右的像素值)、“Color”(补边颜色)和输出的Image。
-
调用Padding()接口对输入图像进行补边。
-
调用MxDeInit()接口对初始化的全局资源进行去初始化。
示例代码
以下为功能特性关键步骤的代码示例,不可以直接拷贝编译运行,仅供参考。
//初始化
MxInit();
{
//构造图像处理类
ImageProcessor imageProcessor(deviceId);
//图像解码生成Image
//解码后的图像类
Image decodedImage;
//根据图像路径进行解码
APP_ERROR ret = imageProcessor.Decode(imagePath, decodedImage);
if (ret != APP_ERR_OK) {
return 0;
}
//(可选)初始化图像处理通道
imageProcessor.InitVpcChannel();
//执行补边
//补边操作后图像类
Image paddingImage;
//构造补边参数
Dim padDim(0, 0, 240, 240);
Color color(0, 0, 0);
// Padding操作
ret = imageProcessor.Padding(decodedImage, padDim, color, BorderType::BORDER_CONSTANT, paddingImage);
if (ret != APP_ERR_OK) {
return 0;
}
}
//去初始化
MxDeInit();
父主题: 通过接口进行图像处理(Image)
抠图缩放
功能介绍
对输入的图像进行抠图并缩放操作,输出到Image对象中。
接口调用流程
使用抠图缩放接口前,用户需准备好被抠图缩放的图片对象。
图1 图像处理(抠图缩放)接口调用流程

关键步骤说明如下:
-
调用MxInit()接口进行全局初始化。
-
ImageProcessor初始化。
用户构造ImageProcessor对象,之后可以调用InitVpcChannel()初始化通道,若不调用该接口,ImageProcessor会在执行抠图缩放前自动进行通道初始化。
-
使用图片解码接口对输入图片进行解码。
根据业务对图片进行解码,生成可抠图缩放的Image对象。后续可以通过图片处理接口对图片进行处理,生成最终需要抠图缩放的Image对象。
-
构造抠图缩放参数和输出Image。
根据业务要求,选择单输入多抠图单缩放、单输入多抠图多缩放或多输入多抠图多缩放的方式,构造对应的输入的Rect、Size和输出的Image。
-
调用CropResize()接口对输入图片进行抠图缩放。
- 同步执行。
- 不创建Stream,将输入图片及其他参数传入接口,获取抠图缩放结果。
- 异步执行。
- 创建Stream,具体请参见异步调用。
- 将输入图片、已创建的Stream及其他参数传入接口,获取抠图缩放结果。
- 同步执行。
-
调用MxDeInit()接口对初始化的全局资源进行去初始化。
示例代码
以下为功能特性关键步骤的代码示例,不可以直接拷贝编译运行,仅供参考。
//初始化
MxInit();
{
//构造图像处理类
ImageProcessor imageProcessor(deviceId);
//图像解码生成Image
//解码后的图像类
Image decodedImage;
//根据图像路径进行解码
APP_ERROR ret = imageProcessor.Decode(imagePath, decodedImage);
if (ret != APP_ERR_OK) {
return 0;
}
//(可选)初始化图像处理通道
imageProcessor.InitVpcChannel();
//执行抠图缩放
//抠图缩放操作后图像类
std::vector<Image> cropResizedImageVec(1);
//抠图尺寸
Rect rect(0, 0, 240, 240);
std::vector<Rect> cropConfigVec = {rect};
//缩放尺寸
Size size(416, 416);
//抠图缩放操作
ret = imageProcessor.CropResize(decodedImage, cropConfigVec, size, cropResizedImageVec);
if (ret != APP_ERR_OK) {
return 0;
}
}
//去初始化
MxDeInit();
父主题: 通过接口进行图像处理(Image)
抠图贴图
功能介绍
对输入的图像进行抠图并粘贴到背景图片中的操作,输出到Image对象中。
接口调用流程
使用抠图贴图接口前,用户需准备好被抠图以及被粘贴的图片对象。
图1 图像处理(抠图贴图)接口调用流程

关键步骤说明如下:
-
调用MxInit()接口进行全局初始化。
-
ImageProcessor初始化。
用户构造ImageProcessor对象,之后可以调用InitVpcChannel()初始化通道,若不调用该接口,ImageProcessor会在执行抠图并贴图前自动进行通道初始化。
-
使用图片解码接口对输入图片进行解码。
根据业务对图片进行解码,生成可抠图贴图的Image对象。后续可以通过图像处理接口对图片进行处理,生成最终需要抠图贴图的Image对象。
-
构造抠图贴图参数和输出Image。
- 根据业务要求,设置被抠图片的矩阵并设置粘贴图片位置的矩阵,二者大小不一样时将自动进行缩放。
- 构造输出图片的背景图片,使用预申请内存的Image()构造函数构造被粘贴图片或其他非空图片作为输出。
-
调用CropAndPaste()对输入图片进行抠图并将图片粘贴至指定位置。
- 同步执行。
- 不创建Stream,将输入图片及其他参数传入接口,获取抠图贴图结果。
- 异步执行。
- 创建Stream,具体请参见异步调用。
- 将输入图片、已创建的Stream及其他参数传入接口,获取抠图贴图结果。
- 调用MxDeInit()接口对初始化的全局资源进行去初始化。
- 同步执行。
示例代码
以下为功能特性关键步骤的代码示例,不可以直接拷贝编译运行,仅供参考。
//初始化
MxInit();
{
//构造图像处理类
ImageProcessor imageProcessor(deviceId);
//图像解码生成Image
//解码后的图像类
Image decodedImage;
//根据图像路径进行解码
APP_ERROR ret = imageProcessor.Decode(imagePath, decodedImage);
if (ret != APP_ERR_OK) {
return 0;
}
//(可选)初始化图像处理通道
imageProcessor.InitVpcChannel();
//构造背景Image(也可以选择其他已有数据的Image对象)
Size imageSize(640, 640);
size_t dataSize = 640 * 640 * 3 / 2;
MemoryData imgData(dataSize, MemoryData::MemoryType::MEMORY_DVPP, deviceId);
if (MemoryHelper::Malloc(imgData) != APP_ERR_OK) {
return 0;
}
std::shared_ptr<uint8_t> pastedData((uint8_t*)imgData.ptrData, imgData.free);
/ 抠图贴图操作后图像类
Image pastedImage(pastedData, dataSize, deviceId, imageSize);
//执行抠图贴图
//抠图和贴图尺寸
Rect rectFrom(0, 0, 240, 240);
Rect rectTo(0, 0, 480, 480);
std::pair<Rect, Rect> cropPasteRect = {rectFrom, rectTo};
//抠图贴图操作
ret = imageProcessor.CropAndPaste(resizeImage, cropPasteRect, pastedImage) ;
if (ret != APP_ERR_OK) {
return 0;
}
}
//去初始化
MxDeInit();
父主题: 通过接口进行图像处理(Image)
在线提单