昇腾社区首页
中文
注册

VPC抠图/缩放

开发应用时,如果涉及抠图、缩放等图片处理,则应用程序中必须包含图片处理的代码逻辑,关于图片处理的接口调用流程,请依次参见主要接口调用流程以及本节中的说明。关于VPC功能的详细介绍请参见功能及约束说明

图1 抠图缩放流程

当前系统支持对输入图片做抠图、缩放,详细说明及调用示例请参见图像处理典型功能(抠图/缩放等)。关键接口的说明如下(调用示例请参见抠图(一图一框)图片缩放):

  1. 调用acl.media.dvpp_create_channel接口创建图片数据处理的通道。

    创建图片数据处理的通道前,需先调用acl.media.dvpp_create_channel_desc接口创建通道描述信息。

  2. 调用acl.media.dvpp_create_roi_config接口、acl.media.dvpp_create_resize_config接口分别创建抠图区域位置的配置、缩放配置。
  3. 实现抠图、缩放功能前,若需要申请Device上的内存存放输入或输出数据,需调用acl.media.dvpp_malloc申请内存。
  4. 执行抠图、缩放。
    • 关于抠图:
      • 调用acl.media.dvpp_vpc_resize_async异步接口,按指定区域从输入图片中抠图,再将抠的图片存放到输出内存中,作为输出图片。

        输出图片区域与抠图区域cropArea不一致时会对图片再做一次缩放操作。

      • 当前系统还提供了acl.media.dvpp_vpc_crop_and_paste_async异步接口,支持按指定区域从输入图片中抠图,再将抠的图片贴到目标图片的指定位置,作为输出图片。
        • 抠图区域cropArea的宽高与贴图区域pasteArea宽高不一致时会对图片再做一次缩放操作。
        • 如果用户需要将目标图片读入内存用于存放输出图片,将贴图区域叠加在目标图片上,则需要编写代码逻辑:在申请输出内存后,将目标图片读入输出内存。
    • 关于缩放
      • 调用acl.media.dvpp_vpc_resize_async异步接口,将输入图片缩放到输出图片大小。
      • 缩放后输出图片内存根据YUV420SP格式计算,计算公式:对齐后的宽*对齐后的高*3/2。
    • 对于异步接口,还需调用acl.rt.synchronize_stream接口阻塞程序运行,直到指定Stream中的所有任务都完成。
  5. 调用acl.media.dvpp_free接口释放输入、输出内存。
  6. 调用acl.media.dvpp_destroy_roi_config接口、acl.media.dvpp_destroy_resize_config接口分别销毁抠图区域位置的配置、缩放配置。
  7. 调用acl.media.dvpp_destroy_channel接口销毁图片数据处理的通道。

    销毁图片数据处理的通道后,再调用acl.media.dvpp_destroy_channel_desc接口销毁通道描述信息。