抠图缩放
缩放
功能介绍
对输入的图像进行缩放操作,输出到Image对象中。
接口调用流程
使用缩放接口前,用户需准备好被缩放的图片对象。
图1 图像处理(缩放)接口调用流程

关键步骤说明如下:
-
调用mx_init()接口进行全局初始化。
-
ImageProcessor初始化。
用户构造ImageProcessor对象,构造时需用户指定设备ID。
-
使用图片解码接口对输入图片进行解码。
根据业务对图片进行解码,生成可缩放的Image对象。后续可以通过图像处理接口对图片进行处理,生成最终需要缩放的Image对象。
-
构造缩放参数和输出Image。
根据业务要求,构造对应的输入和输出Size和Image。
-
将输入图片及其他参数传入resize接口,获取缩放结果。
示例代码
以下为功能特性关键步骤的代码示例,不可以直接拷贝运行,仅供参考。
from mindx.sdk import base
from mindx.sdk.base import ImageProcessor, Size, Image
## 图像解码
## 初始化ImageProcessor对象
imageProcessor = ImageProcessor(device_id)
image_path = "image_data/test_image.jpg"
## 读取图片路径进行解码,解码格式为nv12(YUV_SP_420)
decoded_image = imageProcessor.decode(image_path, base.nv12)
## 图像缩放
## 缩放尺寸
size_para = Size(224, 224)
## 读取将解码后的Image类按尺寸进行缩放,缩放方式为华为自研的高阶滤波算法(huaweiu_high_order_filter)
resized_image = imageProcessor.resize(decoded_image, size_para, base.huaweiu_high_order_filter)
父主题: 媒体数据处理
补边
功能介绍
对输入的图像进行补边操作,输出到Image对象中。
接口调用流程
使用补边接口前,用户需准备好被补边的图片对象。
图1 图像处理(补边)接口调用流程

关键步骤说明如下:
-
调用mx_init()接口进行全局初始化。
-
ImageProcessor初始化。
用户构造ImageProcessor对象,构造时需用户指定设备ID。
-
使用图片解码接口对输入图片进行解码。
根据业务对图片进行解码,生成可补边的Image对象。后续可以通过图像处理接口对图片进行处理,生成最终需要补边的Image对象。
-
构造补边参数。
根据业务要求,构造对应的输入的“padDim”(表示补边上下左右的像素值)、“color”(补边颜色)。
-
调用padding接口对输入图像进行补边。
示例代码
以下为功能特性关键步骤的代码示例,不可以直接拷贝运行,仅供参考。
from mindx.sdk import base
from mindx.sdk.base import ImageProcessor, Dim, Color, Image
## 图像解码
## 初始化ImageProcessor对象
imageProcessor = ImageProcessor(device_id)
image_path = "image_data/test_image.jpg"
## 读取图片路径进行解码,解码格式为nv12(YUV_SP_420)
decoded_image = imageProcessor.decode(image_path, base.nv12)
## 图像补边
## 补边尺寸
dim_para = Dim(100, 100, 100, 100)
## 读取将解码后的Image类按Dim进行补边,补边方式为重复最后一个元素
padded_image = imageProcessor.padding(decoded_image, dim_para, Color(0, 0, 0), base.border_replicate)
父主题: 媒体数据处理
抠图缩放
功能介绍
对输入的图像进行抠图并缩放操作,输出到Image对象中。
接口调用流程
使用抠图缩放接口前,用户需准备好被抠图缩放的图片对象。
图1 图像处理(抠图缩放)接口调用流程

关键步骤说明如下:
-
调用mx_init()接口进行全局初始化。
-
ImageProcessor初始化。
用户构造ImageProcessor对象,构造时需用户指定设备ID。
-
使用图片解码接口对输入图片进行解码。
根据业务对图片进行解码,生成可抠图缩放的Image对象。后续可以通过图片处理接口对图片进行处理,生成最终需要抠图缩放的Image对象。
-
构造抠图缩放参数和输出Image。
根据业务要求,选择单输入单抠图单缩放或单输入多抠图多缩放的方式,构造对应的输入的Rect、Size。
-
调用crop_resize接口对输入图片进行抠图缩放。
示例代码
以下为功能特性关键步骤的代码示例,不可以直接拷贝运行,仅供参考。
from mindx.sdk import base
from mindx.sdk.base import ImageProcessor, Rect, Size, Image
## 图像解码
## 初始化ImageProcessor对象
imageProcessor = ImageProcessor(device_id)
image_path = "test_image.jpg"
## 读取图片路径进行解码,解码格式为nv12(YUV_SP_420)
decoded_image = imageProcessor.decode(image_path, base.nv12)
## 图像抠图并缩放
crop_resize_para = [(Rect(300, 100, 550, 350), Size(100, 100))]
crop_resize_image = imageProcessor.crop_resize(decoded_image, crop_resize_para)
父主题: 媒体数据处理
抠图贴图
功能介绍
对输入的图像进行抠图并粘贴到背景图片中的操作,输出到Image对象中。
接口调用流程
使用抠图贴图接口前,用户需准备好被抠图以及被粘贴的图片对象。
图1 图像处理(抠图贴图)接口调用流程

关键步骤说明如下:
-
调用mx_init()接口进行全局初始化。
-
ImageProcessor初始化。
用户构造ImageProcessor对象,构造时需用户指定设备ID。
-
使用图片解码接口对输入图片进行解码。
根据业务对图片进行解码,生成可抠图贴图的Image对象。后续可以通过图像处理接口对图片进行处理,生成最终需要抠图贴图的Image对象。
-
构造抠图贴图参数和输出Image。
- 根据业务要求,设置被抠图片的矩阵并设置粘贴图片位置的矩阵,二者大小不一样时将自动进行缩放。
- 构造输出图片的背景图片,使用Image构造函数构造被粘贴图片或其他非空图片作为输出。
-
调用crop_paste对输入图片进行抠图并将图片粘贴至指定位置。
示例代码
以下为功能特性关键步骤的代码示例,不可以直接拷贝运行,仅供参考。
from mindx.sdk import base
from mindx.sdk.base import ImageProcessor, Rect, Image
## 图像解码
## 初始化ImageProcessor对象
imageProcessor = ImageProcessor(device_id)
image_path = "image_data/test_image.jpg"
## 读取图片路径进行解码,解码格式为nv12(YUV_SP_420)
decoded_image = imageProcessor.decode(image_path, base.nv12)
## 图像抠图并贴图
crop_paste_para = (Rect(300, 100, 550, 350), Rect(100, 100, 1500, 1500))
imageProcessor.crop_paste(decoded_image , crop_paste_para, paste_image)
父主题: 媒体数据处理
视频编码
功能介绍
通过构造VideoEncoder类实例可实现视频编码功能,编码功能配置项及各项约束与支持情况请参考VideoEncodeConfig类数据结构说明。
视频编码支持自定义输出数据格式,通过自定义回调函数传入编码功能配置项,方便用户使用编码后的数据,详情可参考VencCallBacker类。
接口调用流程
首先根据需求定义需要的输出数据组合方式,根据组合方式参考VencCallBacker定义回调函数传入编码功能配置项,然后实例化VideoEncoder类,最后调用encode成员函数完成编码,获取数据。
视频编码接口调用流程参考如下:
图1 视频编码接口调用流程

mxVision提供VideoEncoder类进行视频编码,关键步骤说明如下:
-
定义输出数据组合形式。
- 输出数据包含视频帧编码后得到的的Image类数据、当前编码帧的“frameId”和通道“channelId”。
- 根据需要选择获取以上哪些数据。
-
定义输出回调函数。
-
根据要获取的数据定义回调函数,在函数内组装自定义数据。
-
回调函数输入参数固定为callback_func形式,函数内可选择输出。
请勿在回调函数内实现过于复杂的操作,建议使用自定义“userData”来接收视频编码回调结果,否则回调线程会发生卡住的现象,导致视频编码速度变慢。
-
-
构造视频编码配置项。
配置项及各项约束与支持情况请参考VideoEncodeConfig数据结构说明。
-
实例化视频编码类。
将配置好的VideoEncodeConfig传入构造函数接口,实例化视频编码类。
-
调用encode接口对视频进行编码。
示例代码
如下提供关键步骤的代码示例,不可以直接拷贝运行,仅供参考。
import os
import numpy as np
import time
from mindx.sdk import base
from mindx.sdk.base import Image, ImageProcessor
from mindx.sdk.base import VideoEncoder, VideoEncodeConfig, VencCallBacker
## 视频编码回调函数
def venc_callback(pyChar, outDataSize, channelId, frameId):
with open('video_save_data/output.h264', 'ab') as file:
file.write(pyChar)
## 初始化VencCallBacker类并注册回调函数
vencCallBacker = VencCallBacker()
vencCallBacker.registerVencCallBack(venc_callback)
## 初始化VideoEncodeConfig
venc_conf = VideoEncodeConfig()
venc_conf.keyFrameInterval = 50
venc_conf.srcRate = 30
venc_conf.maxBitRate = 6000
venc_conf.ipProp = 30
## 初始化VideoEncoder
videoEncoder = VideoEncoder(venc_conf, vencCallBacker, device_id)
## 将编码后数据保存为本地视频,若视频文件已存在则删除
venc_save_path = os.path.join(save_path, 'output.h264')
video_encode_exists = os.path.exists(venc_save_path)
if video_encode_exists:
os.remove(venc_save_path)
## 从decoded_data_list中循环取Image类进行编码
for i, img in enumerate(decoded_data_list):
videoEncoder.encode(img, i)
父主题: 媒体数据处理
视频解码
功能介绍
通过构造VideoDecoder类实例可实现视频解码功能,解码功能配置项及各项约束与支持情况请参考VideoDecodeConfig类数据结构说明。
视频解码支持自定义输出数据格式,通过自定义回调函数传入解码功能配置项,方便用户解码后的数据,详情可参考VdecCallBacker类数据结构说明。
接口调用流程
首先根据需求定义需要的输出数据组合方式,根据组合方式参考VdecCallBacker定义回调函数传入解码功能配置项,然后实例化VideoDecoder类,最后调用decode成员函数完成解码,获取数据。
视频解码接口调用流程参考如下:
图1 视频解码接口调用流程

mxVision提供VideoDecoder类进行视频解码,关键步骤说明如下:
-
定义输出数据组合形式。
- 输出数据包含视频帧解码后得到的的Image类数据、当前解码帧的“frameId”和通道“channelId”。
- 可根据需要选择获取以上哪些数据。
-
定义输出回调函数。
- 根据要获取的数据定义回调函数,在函数内组装自定义数据。
- 回调函数输入参数固定为VideoDecodeCallBack形式,函数内可选择输出。
- 请勿在回调函数内实现过于复杂的操作,建议只进行自定义获取解码数据操作。
-
构造视频解码配置项。
配置项及各项约束与支持情况请参考VideoDecodeConfig数据结构说明。
-
实例化视频解码类。
将配置好的VideoDecodeConfig传入构造函数接口,实例化视频解码类。
-
调用decode接口对视频进行解码。
示例代码
如下提供关键步骤的代码示例,不可以直接拷贝运行,仅供参考。
import os
import numpy as np
import time
from mindx.sdk import base
from mindx.sdk.base import Image, ImageProcessor
from mindx.sdk.base import VideoDecoder, VideoDecodeConfig, VdecCallBacker
decoded_data_list = []
## 视频解码回调函数
def vdec_callback(decodedImage, channelId, frameId):
# 解码完成的Image类存入列表中
decoded_data_list.append(decodedImage)
## 初始化VdecCallBacker类并注册回调函数
vdecCallBacker = VdecCallBacker()
vdecCallBacker.registerVdecCallBack(vdec_callback)
## 初始化VideoDecodeConfig类并设置参数
vdecConfig = VideoDecodeConfig()
vdecConfig.skipInterval = 0
vdecConfig.inputVideoFormat = base.h264_main_level
vdecConfig.outputImageFormat = base.nv12
vdecConfig.width = 1920
vdecConfig.height = 1080
## 初始化VideoDecoder
videoDecoder = VideoDecoder(vdecConfig, vdecCallBacker, device_id, channel_id)
## 获取需解码视频帧文件名
srcDataList = ["frame-{}.data".format(i) for i in range(100)]
## 循环取帧解码
for i, fileName in enumerate(srcDataList):
## 读取视频帧数据存入file
file = np.fromfile(fileName, dtype='uint8')
## 视频帧数据解码
videoDecoder.decode(file, i)
父主题: 媒体数据处理
在线提单