bmcv_image_transpose
该接口可以实现图片宽和高的转置。
接口形式:
bm_status_t bmcv_image_transpose( bm_handle_t handle, bm_image input, bm_image output );
传入参数说明:
bm_handle_t handle
输入参数。设备环境句柄,通过调用 bm_dev_request 获取。
bm_image input
输入参数。输入图像的 bm_image 结构体。
bm_image output
输出参数。输出图像的 bm_image 结构体。
返回值说明:
BM_SUCCESS: 成功
其他:失败
代码示例
#include <iostream> #include <vector> #include "bmcv_api_ext.h" #include "bmlib_utils.h" #include "common.h" #include "stdio.h" #include "stdlib.h" #include "string.h" #include <memory> int main(int argc, char *argv[]) { bm_handle_t handle; bm_dev_request(&handle, 0); int image_n = 1; int image_h = 1080; int image_w = 1920; bm_image src, dst; bm_image_create(handle, image_h, image_w, FORMAT_RGB_PLANAR, DATA_TYPE_EXT_1N_BYTE, &src); bm_image_create(handle, image_w, image_h, FORMAT_RGB_PLANAR, DATA_TYPE_EXT_1N_BYTE, &dst); std::shared_ptr<u8*> src_ptr = std::make_shared<u8*>( new u8[image_h * image_w * 3]); memset((void *)(*src_ptr.get()), 148, image_h * image_w * 3); u8 *host_ptr[] = {*src_ptr.get()}; bm_image_copy_host_to_device(src, (void **)host_ptr); bmcv_image_transpose(handle, src, dst); bm_image_destroy(src); bm_image_destroy(dst); bm_dev_free(handle); return 0; }
注意事项:
该 API 要求输入和输出的 bm_image 图像格式相同,支持以下格式:
num |
image_format |
---|---|
1 |
FORMAT_RGB_PLANAR |
2 |
FORMAT_BGR_PLANAR |
3 |
FORMAT_GRAY |
该 API 要求输入和输出的 bm_image 数据类型相同,支持以下类型:
num |
data_type |
---|---|
1 |
DATA_TYPE_EXT_FLOAT32 |
2 |
DATA_TYPE_EXT_1N_BYTE |
3 |
DATA_TYPE_EXT_4N_BYTE |
4 |
DATA_TYPE_EXT_1N_BYTE_SIGNED |
5 |
DATA_TYPE_EXT_4N_BYTE_SIGNED |
输出图像的 width 必须等于输入图像的 height,输出图像的 height 必须等于输入图像的 width ;
输入图像支持带有 stride;
输入输出 bm_image 结构必须提前创建,否则返回失败。
输入 bm_image 必须 attach device memory,否则返回失败
如果输出对象未 attach device memory,则会内部调用 bm_image_alloc_dev_mem 申请内部管理的 device memory,并将转置后的数据填充到 device memory 中。