VPI - 视觉编程接口

3.2 版本

转换图像格式

将图像内容转换为所需的格式,并可选择像素值缩放和偏移。更多...

数据结构

struct  VPIConvertImageFormatParams
 用于自定义图像格式转换的参数。更多...
 

枚举

enum  VPIConversionPolicy
 图像类型之间转换时使用的策略。更多...
 

函数

VPIStatus vpiInitConvertImageFormatParams (VPIConvertImageFormatParams *params)
 使用默认值初始化 VPIConvertImageFormatParams更多...
 
VPIStatus vpiSubmitConvertImageFormat (VPIStream stream, uint64_t backend, VPIImage input, VPIImage output, const VPIConvertImageFormatParams *params)
 将图像内容转换为所需的格式,并可选择缩放和偏移。更多...
 
VPIStatus vpiSubmitConvertImageFormatPyramid (VPIStream stream, uint64_t backend, VPIPyramid input, VPIPyramid output, const VPIConvertImageFormatParams *params)
 将金字塔内容转换为所需的格式,并可选择缩放和偏移。更多...
 

详细描述

将图像内容转换为所需的格式,并可选择像素值缩放和偏移。

有关更多详细信息和使用示例,请参阅 转换图像格式


数据结构文档

◆ VPIConvertImageFormatParams

struct VPIConvertImageFormatParams

用于自定义图像格式转换的参数。

这些参数用于自定义转换的执行方式。请务必在更新其属性之前调用 vpiInitConvertImageFormatParams 以初始化此结构。这保证了未来版本中添加的新属性将被分配合适的默认值。

定义于文件 ConvertImageFormat.h 的第 85 行。

+ VPIConvertImageFormatParams 的协作图
数据字段
VPIConversionPolicy policy 要使用的转换策略。
float scale 缩放因子。

传递 1 表示不缩放。

  • VIC 后端不支持缩放,必须为 1。
float offset 偏移因子。

传递 0 表示不偏移。

  • VIC 后端不支持偏移,必须为 0。
uint64_t flags 控制标志。
  • 有效值
    • 0:默认值,所有其他标志的取反。
    • VPI_PRECISE : 精确,可能较慢的实现。
VPIInterpolationType chromaUpFilter 用于色度上采样的插值。
VPIInterpolationType chromaDownFilter 用于色度下采样的插值。

枚举类型文档

◆ VPIConversionPolicy

#include <vpi/Types.h>

图像类型之间转换时使用的策略。

枚举器
VPI_CONVERSION_CLAMP 

将输入值限制在输出类型范围内。

溢出和下溢分别映射到输出类型的最大值和最小值。当输出类型为浮点型时,钳位行为类似于类型转换。

VPI_CONVERSION_CAST 

将输入值强制转换为输出类型。

溢出和下溢按照 C 规范处理,包括未定义行为的情况。

VPI_CONVERSION_INVALID 

无效的转换。

定义于文件 Types.h 的第 290 行。

函数文档

◆ vpiInitConvertImageFormatParams()

VPIStatus vpiInitConvertImageFormatParams ( VPIConvertImageFormatParams params)

#include <vpi/algo/ConvertImageFormat.h>

使用默认值初始化 VPIConvertImageFormatParams

以下参数被设置

参数
[out]params要填充的结构的指针。不得为 NULL。
返回值
VPI_ERROR_INVALID_ARGUMENTparams 为 NULL。
VPI_SUCCESS操作成功执行。

◆ vpiSubmitConvertImageFormat()

VPIStatus vpiSubmitConvertImageFormat ( VPIStream  stream,
uint64_t  backend,
VPIImage  input,
VPIImage  output,
const VPIConvertImageFormatParams params 
)

#include <vpi/algo/ConvertImageFormat.h>

将图像内容转换为所需的格式,并可选择缩放和偏移。

输入和输出格式从作为参数传递的相应图像推断得出。当缩放和偏移是分数时,输入在转换发生之前被转换为 32 位浮点数。关联输入和输出像素的公式是

\[ out(x,y) = clamp_{[\mathsf{min_{out}},\mathsf{max_{out}}]}(in(x,y)*\alpha + \beta) \]

其中

  • \(\mathsf{min_{out}}\) 和 \(\mathsf{max_{out}}\) 是输出图像格式可表示的最小值和最大值。浮点类型是例外,其限制为 \([-\infty,\infty]\),即不进行钳位。
  • \(\alpha\) 是缩放。
  • \(\beta\) 是偏移。

浮点到整数的转换返回最接近的整数,将中间情况四舍五入到远离零的方向。

支持的格式转换。

  • 标有 '*' 的图像格式之间的转换尚未实现。
  • 在 CPU 和 CUDA 上,任何 pitch-linear 格式都可以转换为自身,前提是 scale 为 1 且 offset 为 0。
  • 下表中的每张表格内的格式之间可以相互转换。
CPU 和 CUDAVIC
VPI_IMAGE_FORMAT_U8 VPI_IMAGE_FORMAT_Y8
VPI_IMAGE_FORMAT_U16 VPI_IMAGE_FORMAT_Y8_BL
VPI_IMAGE_FORMAT_S8 VPI_IMAGE_FORMAT_Y8_BL16
VPI_IMAGE_FORMAT_S16 VPI_IMAGE_FORMAT_Y8_ER
VPI_IMAGE_FORMAT_Y8_ER VPI_IMAGE_FORMAT_Y8_ER_BL
VPI_IMAGE_FORMAT_Y16_ER VPI_IMAGE_FORMAT_Y8_ER_BL16
VPI_IMAGE_FORMAT_NV12_ER* VPI_IMAGE_FORMAT_NV12
VPI_IMAGE_FORMAT_NV24_ER* VPI_IMAGE_FORMAT_NV12_BL
VPI_IMAGE_FORMAT_RGB8 VPI_IMAGE_FORMAT_NV12_BL16
VPI_IMAGE_FORMAT_BGR8 VPI_IMAGE_FORMAT_NV12_ER
VPI_IMAGE_FORMAT_RGBA8 VPI_IMAGE_FORMAT_NV12_ER_BL
VPI_IMAGE_FORMAT_BGRA8 VPI_IMAGE_FORMAT_NV12_ER_BL16
VPI_IMAGE_FORMAT_F32 VPI_IMAGE_FORMAT_NV24
VPI_IMAGE_FORMAT_NV24_BL
VPI_IMAGE_FORMAT_NV24_BL16
VPI_IMAGE_FORMAT_NV24_ER
VPI_IMAGE_FORMAT_NV24_ER_BL
VPI_IMAGE_FORMAT_NV24_ER_BL16
VPI_IMAGE_FORMAT_YUYV
VPI_IMAGE_FORMAT_YUYV_BL
VPI_IMAGE_FORMAT_YUYV_BL16
VPI_IMAGE_FORMAT_YUYV_ER
VPI_IMAGE_FORMAT_YUYV_ER_BL
VPI_IMAGE_FORMAT_YUYV_ER_BL16
VPI_IMAGE_FORMAT_UYVY
VPI_IMAGE_FORMAT_UYVY_BL
VPI_IMAGE_FORMAT_UYVY_BL16
VPI_IMAGE_FORMAT_UYVY_ER
VPI_IMAGE_FORMAT_UYVY_ER_BL
VPI_IMAGE_FORMAT_UYVY_ER_BL16
VPI_IMAGE_FORMAT_RGBA8
VPI_IMAGE_FORMAT_BGRA8
CPU 和 CUDAVIC
VPI_IMAGE_FORMAT_2F32 VPI_IMAGE_FORMAT_Y16
VPI_IMAGE_FORMAT_Y16_BL
VPI_IMAGE_FORMAT_Y16_BL16
VIC
VPI_IMAGE_FORMAT_Y16_ER
VPI_IMAGE_FORMAT_Y16_ER_BL
VPI_IMAGE_FORMAT_Y16_ER_BL16
VIC
VPI_IMAGE_FORMAT_2S16
VPI_IMAGE_FORMAT_2S16_BL
VPI_IMAGE_FORMAT_2S16_BL16

扩展范围或工作室范围的格式与非彩色格式(即 U8、F32、S16 等)之间的转换将保持范围不变,但 VPIConvertImageFormatParams::policy 中指定的钳位或强制转换除外。

参数
[in]stream操作将排队到其中的流句柄。
  • 不得为 NULL。
  • 流必须已启用将执行该算法的后端。
[in]backend将执行该算法的后端。
[in]input要转换的输入图像。
  • 不得为 NULL。
  • 图像必须已启用将执行该算法的后端。
  • 在 VIC 上,当从具有 4:2:2(R) 色度子采样的格式转换为非 YUV 格式或色度子采样不是 4:4:4 的格式时,图像宽度必须为偶数(高度没有限制)。
[out]output结果将写入到的输出图像,具有所需的格式。
  • 不得为 NULL。
  • 必须与输入图像具有相同的尺寸。
  • 图像必须已启用将执行该算法的后端。
  • 在 VIC 上,当转换为具有 4:2:0 或 4:2:2(R) 色度子采样的格式(即 YUYV 或 NV12)时,图像宽度和高度必须为偶数。
[in]params用于微调转换的参数。传递 NULL 以使用 vpiInitConvertImageFormatParams 给出的默认值。
返回值
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL。
VPI_ERROR_INVALID_ARGUMENTinputoutput 为 NULL。
VPI_ERROR_INVALID_ARGUMENTparams 中的无效标志。
VPI_ERROR_INVALID_ARGUMENTparams 中的无效转换类型。
VPI_ERROR_INVALID_ARGUMENTinputoutput 图像尺寸不匹配。
VPI_ERROR_INVALID_ARGUMENToutput 格式不能用于给定的图像尺寸。
VPI_ERROR_INVALID_IMAGE_FORMAT不支持格式转换。
VPI_ERROR_NOT_IMPLEMENTED给定后端不支持转换图像格式算法。
VPI_ERROR_INVALID_OPERATION硬件后端不可用。
VPI_ERROR_INVALID_OPERATION所需的后端未在 streaminputoutput 中启用。
VPI_SUCCESS操作成功执行。

◆ vpiSubmitConvertImageFormatPyramid()

VPIStatus vpiSubmitConvertImageFormatPyramid ( VPIStream  stream,
uint64_t  backend,
VPIPyramid  input,
VPIPyramid  output,
const VPIConvertImageFormatParams params 
)

#include <vpi/algo/ConvertImageFormat.h>

将金字塔内容转换为所需的格式,并可选择缩放和偏移。

输入和输出格式从作为参数传递的相应金字塔推断得出。当缩放和偏移是分数时,输入在转换发生之前被转换为 32 位浮点数。关联输入和输出像素的公式是

\[ out(x,y) = clamp_{[\mathsf{min_{out}},\mathsf{max_{out}}]}(in(x,y)*\alpha + \beta) \]

其中

  • \(\mathsf{min_{out}}\) 和 \(\mathsf{max_{out}}\) 是输出图像格式可表示的最小值和最大值。浮点类型是例外,其限制为 \([-\infty,\infty]\),即不进行钳位。
  • \(\alpha\) 是缩放。
  • \(\beta\) 是偏移。

浮点到整数的转换返回最接近的整数,将中间情况四舍五入到远离零的方向。

支持的格式转换。

  • 标有 '*' 的图像格式之间的转换尚未实现。
  • 在 CPU 和 CUDA 上,任何 pitch-linear 格式都可以转换为自身,前提是 scale 为 1 且 offset 为 0。
  • 下表中的每张表格内的格式之间可以相互转换。
CPU 和 CUDAVIC
VPI_IMAGE_FORMAT_U8 VPI_IMAGE_FORMAT_Y8
VPI_IMAGE_FORMAT_U16 VPI_IMAGE_FORMAT_Y8_BL
VPI_IMAGE_FORMAT_S8 VPI_IMAGE_FORMAT_Y8_BL16
VPI_IMAGE_FORMAT_S16 VPI_IMAGE_FORMAT_Y8_ER
VPI_IMAGE_FORMAT_Y8_ER VPI_IMAGE_FORMAT_Y8_ER_BL
VPI_IMAGE_FORMAT_Y16_ER VPI_IMAGE_FORMAT_Y8_ER_BL16
VPI_IMAGE_FORMAT_NV12_ER* VPI_IMAGE_FORMAT_NV12
VPI_IMAGE_FORMAT_NV24_ER* VPI_IMAGE_FORMAT_NV12_BL
VPI_IMAGE_FORMAT_RGB8 VPI_IMAGE_FORMAT_NV12_BL16
VPI_IMAGE_FORMAT_BGR8 VPI_IMAGE_FORMAT_NV12_ER
VPI_IMAGE_FORMAT_RGBA8 VPI_IMAGE_FORMAT_NV12_ER_BL
VPI_IMAGE_FORMAT_BGRA8 VPI_IMAGE_FORMAT_NV12_ER_BL16
VPI_IMAGE_FORMAT_F32 VPI_IMAGE_FORMAT_NV24
VPI_IMAGE_FORMAT_NV24_BL
VPI_IMAGE_FORMAT_NV24_BL16
VPI_IMAGE_FORMAT_NV24_ER
VPI_IMAGE_FORMAT_NV24_ER_BL
VPI_IMAGE_FORMAT_NV24_ER_BL16
VPI_IMAGE_FORMAT_YUYV
VPI_IMAGE_FORMAT_YUYV_BL
VPI_IMAGE_FORMAT_YUYV_BL16
VPI_IMAGE_FORMAT_YUYV_ER
VPI_IMAGE_FORMAT_YUYV_ER_BL
VPI_IMAGE_FORMAT_YUYV_ER_BL16
VPI_IMAGE_FORMAT_UYVY
VPI_IMAGE_FORMAT_UYVY_BL
VPI_IMAGE_FORMAT_UYVY_BL16
VPI_IMAGE_FORMAT_UYVY_ER
VPI_IMAGE_FORMAT_UYVY_ER_BL
VPI_IMAGE_FORMAT_UYVY_ER_BL16
VPI_IMAGE_FORMAT_RGBA8
VPI_IMAGE_FORMAT_BGRA8
CPU 和 CUDAVIC
VPI_IMAGE_FORMAT_2F32 VPI_IMAGE_FORMAT_Y16
VPI_IMAGE_FORMAT_Y16_BL
VPI_IMAGE_FORMAT_Y16_BL16
VIC
VPI_IMAGE_FORMAT_Y16_ER
VPI_IMAGE_FORMAT_Y16_ER_BL
VPI_IMAGE_FORMAT_Y16_ER_BL16
VIC
VPI_IMAGE_FORMAT_S16
VPI_IMAGE_FORMAT_S16_BL
VPI_IMAGE_FORMAT_S16_BL16

扩展范围或工作室范围的格式与非彩色格式(即 U8、F32、S16 等)之间的转换将保持范围不变,但 VPIConvertImageFormatParams::policy 中指定的钳位或强制转换除外。

参数
[in]stream操作将排队到其中的流句柄。
  • 不得为 NULL。
  • 流必须已启用将执行该算法的后端。
[in]backend将执行该算法的后端。
[in]input要转换的输入金字塔。
  • 不得为 NULL。
  • 图像必须已启用将执行该算法的后端。
  • 在 VIC 上,当从具有 4:2:2(R) 色度子采样的格式转换为非 YUV 格式或色度子采样不是 4:4:4 的格式时,所有级别的金字塔宽度必须为偶数(高度没有限制)。
[out]output结果将写入到的输出金字塔,具有所需的格式。
  • 不得为 NULL。
  • 必须与输入金字塔具有相同的尺寸。
  • 图像必须已启用将执行该算法的后端。
  • 在 VIC 上,当转换为具有 4:2:0 或 4:2:2(R) 色度子采样的格式(即 YUYV 或 NV12)时,所有级别的金字塔宽度和高度必须为偶数。
[in]params用于微调转换的参数。传递 NULL 以使用 vpiInitConvertImageFormatParams 给出的默认值。
返回值
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL。
VPI_ERROR_INVALID_ARGUMENTinputoutput 为 NULL。
VPI_ERROR_INVALID_ARGUMENTparams 中的无效标志。
VPI_ERROR_INVALID_ARGUMENTparams 中的无效转换类型。
VPI_ERROR_INVALID_ARGUMENTinputoutput 金字塔尺寸或级别数量不匹配。
VPI_ERROR_INVALID_ARGUMENToutput 格式不能用于给定的金字塔尺寸。
VPI_ERROR_INVALID_IMAGE_FORMAT不支持格式转换。
VPI_ERROR_NOT_IMPLEMENTED给定后端不支持转换图像格式算法。
VPI_ERROR_INVALID_OPERATION硬件后端不可用。
VPI_ERROR_INVALID_OPERATION所需的后端未在 streaminputoutput 中启用。
VPI_SUCCESS操作成功执行。