CropAndPaste
Crop
函数功能
ImageProcessor类的图像抠图接口,使用该接口申请的Image内存无需用户管理,由内部管理释放,抠图效果示意图请参见图1。
输入输出Image类支持的图像格式参考如下。
- Atlas 200I/500 A2 推理产品 支持YUV_SP_420、YVU_SP_420(nv12、nv21)。
-
“inputImage”的真实图片分辨率范围:18 * 6 ~ 4096 * 4096,其中 YUV_SP_420 和 YVU_SP_420 格式的分辨率为18 * 6 ~ 8192 * 8192。
-
抠图区域不超出输入图片区域,输入抠图坐标框“cropRect”的四个值推荐均为偶数。
除RGB、BGR以外,若包含奇数,则左上角坐标自动向下取偶数,右下角坐标自动向上取偶数。
抠图区域的最大分辨率为4096 * 4096,最小分辨率为18 * 6。
例如:cropRect{1, 1, 1287, 1287},实际抠图宽高为:((1287 + 1) - (1 - 1))= 1288,对应的分辨率为1288 * 1288。
-
输出“outputImageVec”中,各项图片的宽自动与16对齐, 高与2对齐,范围为:32 * 6 ~ 4096 * 4096。
批量输入图片的抠图场景,输入图片数量不超过12张,抠图配置参数“cropRectVec”长度不超过256,输出图片张数不超过256且应满足输出图片张数 = 输入图片张数 * 抠图配置参数“cropRectVec”长度。
图1 抠图

函数原型
APP_ERROR Crop(const Image& inputImage, const Rect& cropRect, Image& outputImage);
APP_ERROR Crop(const Image& inputImage, const Rect& cropRect, Image& outputImage, AscendStream& stream);
APP_ERROR Crop(const Image& inputImage, const std::vector<Rect>& cropRectVec, std::vector<Image>& outputImageVec);
APP_ERROR Crop(const Image& inputImage, const std::vector<Rect>& cropRectVec, std::vector<Image>& outputImageVec, AscendStream& stream);
APP_ERROR Crop(const std::vector<Image>& inputImageVec, const std::vector<Rect>& cropRectVec, std::vector<Image>& outputImageVec);
APP_ERROR Crop(const std::vector<Image>& inputImageVec, const std::vector<Rect>& cropRectVec, std::vector<Image>& outputImageVec, AscendStream& stream);
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputImage | 输入 | 输入抠图前的Image类。 Decode接口和其他VPC接口获取的Image类可以直接作为输入。若是用户自定义构造的Image类,则需要设置图像宽高。 |
| inputImageVec | 输入 | 输入抠图前的Image类列表(针对批量抠图场景)。 |
| cropRect | 输入 | 输入图像的抠图坐标框。 |
| cropRectVec | 输入 | 输入图像的抠图坐标框列表(针对批量抠图场景)。 |
| outputImage | 输出 | 输出抠图后的Image类。 |
| outputImageVec | 输出 | 输出抠图后的Image类列表(针对批量抠图场景)。 |
| stream | 输入 | 输入用于异步执行的Stream,具体请参见AscendStream。 |
返回参数说明
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
父主题: ImageProcessor
CropResize
函数功能
ImageProcessor类的图像抠图并缩放接口,使用该接口申请的Image内存无需用户管理,由内部管理释放,抠图缩放效果示意图请参见图1。
输入输出Image类支持的图像格式参考如下。
- Atlas 200I/500 A2 推理产品 支持YUV_SP_420、YVU_SP_420(nv12、nv21)。
-
“inputImage”的真实图片宽高大小范围:18 * 6 ~ 4096 * 4096,其中YUV_SP_420和YVU_SP_420格式的宽高可达到8192 * 8192。
-
抠图区域的最小为10 * 6,抠图区域不能超出输入图片的真实图片宽高,输入“cropRect”的四个值推荐均为偶数。
除RGB、BGR以外,若包含奇数,则左上角坐标自动向下取偶数,右下角坐标自动向上取偶数。
输出Image类的最大分辨率为4096 * 4096,最小分辨率为18 * 6。
例如:cropRect{1, 1, 1287, 1287} ,实际抠图宽高为:((1287 + 1) - (1 - 1))= 1288,对应的分辨率为1288 * 1288。
-
缩放的范围为18 * 6 ~ 4096 * 4096,不能超出抠图区域的[1/32, 16]倍数区间。
-
输出“outputImageVec”中,各项图片的宽自动与16对齐, 高与2对齐,范围为:32 * 6 ~ 4096 * 4096。
图1 抠图缩放

函数原型
APP_ERROR CropResize(const Image& inputImage, const std::vector<Rect>& cropRectVec, const Size& resize, std::vector<Image>& outputImageVec);
APP_ERROR CropResize(const Image& inputImage, const std::vector<Rect>& cropRectVec, const Size& resize, std::vector<Image>& outputImageVec, AscendStream& stream);
APP_ERROR CropResize(const Image& inputImage, const std::vector<std::pair<Rect, Size>>& cropResizeVec, std::vector<Image>& outputImageVec);
APP_ERROR CropResize(const Image& inputImage, const std::vector<std::pair<Rect, Size>>& cropResizeVec, std::vector<Image>& outputImageVec, AscendStream& stream);
APP_ERROR CropResize(const std::vector<Image>& inputImageVec, const std::vector<std::pair<Rect, Size>>& cropResizeVec, std::vector<Image>& outputImageVec);
APP_ERROR CropResize(const std::vector<Image>& inputImageVec, const std::vector<std::pair<Rect, Size>>& cropResizeVec, std::vector<Image>& outputImageVec, AscendStream& stream);
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputImage | 输入 | 输入抠图缩放前的Image类。 Decode接口和其他VPC接口获取的Image类可以直接作为输入。若是用户自定义构造的Image类,则需要设置图像宽高和图像对齐后的宽高。 |
| inputImageVec | 输入 | 输入抠图缩放前的Image类列表(针对批量抠图场景)。 Decode接口和其他VPC接口获取的Image类可以直接作为输入。若是用户自定义构造的Image类,则需要设置图像宽高和图像对齐后的宽高。 |
| cropRectVec | 输入 | 输入抠图参数列表,需要与输出图像列表的元素个数一致。 |
| resize | 输入 | 输入统一缩放宽高。 |
| cropResizeVec | 输入 | 输入图像的抠图缩放参数列表。Rect为抠图坐标框,Size为缩放宽高(针对批量抠图缩放场景)。 |
| outputImageVec | 输出 | 输出抠图后的Image类列表(针对批量抠图场景)。 |
| stream | 输入 | 输入用于异步执行的Stream,具体请参见AscendStream。 |
返回参数说明
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
父主题: ImageProcessor
CropAndPaste
函数功能
ImageProcessor类的图像抠图并贴图接口,抠图贴图效果示意图请参见图1。
-
输入输出Image类支持的图像格式参考如下。
- Atlas 200I/500 A2 推理产品 支持YUV_SP_420、YVU_SP_420(nv12、nv21)。
-
从“inputImage”中抠取一块图像。
-
输入Image类的真实图片宽高大小范围:18 * 6 ~ 4096 * 4096,其中 YUV_SP_420 和 YVU_SP_420 格式的宽高可达到 8192 * 8192。
-
抠图宽高范围不能超过“inputImage”的真实图片宽高,抠图区域的范围最小为:10 * 6。
输入抠图参数的四个值推荐均为偶数。除RGB、BGR以外,若包含奇数,则左上角坐标自动向下取偶数,右下角坐标自动向上取偶数。
例如:cropRect{1, 1, 1287, 1287} ,实际抠图宽高为:((1287 + 1) - (1 - 1))= 1288。
-
-
缩放至指定贴图区域的大小。
-
将缩放后的图片贴到“pastedImage”的指定贴图区域。
- 贴图宽高范围不能超过“pastedImage”的真实图片宽高,贴图区域的范围最小为: 10 * 6 ,最大为:4096 * 4096。
- 输入贴图参数的四个值推荐均为偶数。除RGB、BGR以外,若包含奇数,则左上角坐标自动向下取偶数,右下角坐标自动向上取偶数。
- 贴图参数左上角坐标的x会自动对齐到16的倍数。例如:
- pasteRect{17, 17, 1287, 1287} ,实际贴图宽高为:((1287 + 1) - (17 - 1))= 1272,对应的分辨率为1272 * 1272。
- pasteRect{18, 18, 1287, 1287} ,实际贴图宽为:((1287 + 1) - 32) = 1256,高为:((1287 + 1) - 18) = 1270,对应的分辨率为1256 * 1270。
- 贴图宽高不能超过抠图宽高的[1/32, 16]倍数区间。
- 在 Atlas 200I/500 A2 推理产品 环境下,贴图“rect”的右下角的“x”值推荐与“16”对齐。
-
输出的“pastedImage”宽自动与16对齐,高与2对齐,因此宽高范围为:32 * 6 ~ 4096 * 4096。
图1 抠图缩放贴图

函数原型
APP_ERROR CropAndPaste(const Image& inputImage, const std::pair<Rect, Rect>& cropPasteRect, Image& pastedImage);
APP_ERROR CropAndPaste(const Image& inputImage, const std::pair<Rect, Rect>& cropPasteRect, Image& pastedImage, AscendStream& stream);
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| inputImage | 输入 | 输入抠图缩放前的Image类。 Decode接口和其他VPC接口获取的Image类可以直接作为输入。若是用户自定义构造的Image类,则需要设置图像宽高和图像对齐后的宽高。 |
| cropPasteRect | 输入 | 输入图像的抠图缩放参数。第一个Rect对应抠图参数,第二个Rect对应贴图参数。 |
| pastedImage | 输入/输出 | 输出抠图后的Image类。 |
| stream | 输入 | 输入用于异步执行的Stream,具体请参见AscendStream。 |
返回参数说明
| 数据结构 | 说明 |
|---|---|
| APP_ERROR | 程序执行返回的错误码,请参考APP_ERROR说明。 |
父主题: ImageProcessor
类说明
Tensor数据类,作为模型推理的输入与输出的数据结构。
:::note 说明 Tensor类涉及申请Device侧资源,与MxDeInit的作用域冲突,因此,其作用域不能大于或等于MxDeInit的作用域。 :::
父主题: Tensor
Tensor
函数功能
Tensor类的构造函数。
函数原型
Tensor() //默认构造函数。 构造失败时,会抛出std::runtime_error异常
Tensor(const Tensor &tensor); // 支持拷贝构造
Tensor(const std::vector<uint32_t> &shape, const MxBase::TensorDType &dataType, const int32_t &deviceId = -1)
//不传入内存,可搭配TensorMalloc接口进行内存申请,申请的内存无需用户管理释放。 构造失败时,会抛出std::runtime_error异常
Tensor(void* usrData,const std::vector<uint32_t> &shape, const MxBase::TensorDType &dataType, const int32_t &deviceId = -1)
//传入用户自己构造的数据内存,需要用户自身对此内存进行管理(保证内存数据的生命周期)。 构造失败时,会抛出std::runtime_error异常
Tensor(const std::vector<uint32_t> &shape, const MxBase::TensorDType &dataType, const int32_t &deviceId,
bool isDvpp);
Tensor(void *usrData, const std::vector<uint32_t> &shape, const MxBase::TensorDType &dataType,
const int32_t &deviceId, const bool isDvpp, const bool isBorrowed);
Tensor(const Tensor &tensor, const Rect &rect); // 带引用区域的拷贝构造
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| tensor | 输入 | 已初始化的其它Tensor。 |
| usrData | 输入 | 用户构造的输入内存,该内存由用户管理申请和释放。 |
| shape | 输入 | Tensor的shape属性。 |
| dataType | 输入 | Tensor的数据类型,具体请参见TensorDType。 |
| deviceId | 输入 | Tensor所在的设备ID,默认为-1,在Host侧。 - 当Tensor构造函数中使用“isDVPP”参数,此时deviceID无默认值,需根据实际情况输入。 - 如果传入用户指针“usrData”,该值需要与deviceId为同一侧内存(Host侧为“-1”,Device侧为具体设备ID),否则后续业务存在风险和异常。 |
| isDvpp | 输入 | 设置是否申请DVPP的内存,“deviceId”如果为“-1”,则申请Host侧内存,该参数设置无效。 如果传入用户指针“usrData”并且“isDvpp”设置为“true”,则需保证“usrData”指向的内存在Device侧,否则后续业务存在风险和异常。 |
| isBorrowed | 输入 | 设置是否将usrData指向的内存交由Tensor来释放,“isBorrowed”的值设为“false”,则由Tensor来释放usrData指向的内存,用户无需释放;“isBorrowed”的值设为“true”,则用户需要自行管理usrData指向的内存。 (须知 委托Tensor管理该内存,仅支持需要手动释放的内存,否则可能导致内存重复释放。) |
| rect | 输入 | 代表图片的引用区域坐标(x0, y0, x1, y1)左闭右开。 (须知 若采用Tensor(const Tensor &tensor, const Rect &rect)的方式进行构造,要求: tensor不能为空,仅支持 NHWC 、 HWC 和 HW 的tensor,通道数为1/3/4,batch维度为1。 rect区域x0,y0需要分别小于x1,y1;x0, y0, x1,y1需要在tensor的宽高范围内。) |
父主题: Tensor
~Tensor
函数功能
Tensor类的默认析构函数。
函数原型
~Tensor()
父主题: Tensor
在线提单