VPI - 视觉编程接口

3.2 版本

定义了 VPIWarpMap 对象及相关函数。 更多...

数据结构

结构体  VPIWarpGrid
 保存 VPI 的扭曲网格定义。 更多...
 
结构体  VPIWarpMap
 定义了输入和输出图像像素之间的映射。 更多...
 

函数

VPIStatus vpiWarpMapAllocData (VPIWarpMap *warpMap)
 为给定的扭曲网格分配扭曲映射的控制点数组。 更多...
 
void vpiWarpMapFreeData (VPIWarpMap *warpMap)
 释放由 vpiWarpMapAllocData 分配的扭曲映射控制点。 更多...
 
VPIStatus vpiWarpMapGenerateIdentity (VPIWarpMap *warpMap)
 使用单位映射填充给定的扭曲映射。 更多...
 
#define VPI_WARPGRID_MAX_HORIZ_REGIONS_COUNT   4
 扭曲网格中水平区域的最大数量。
 
#define VPI_WARPGRID_MAX_VERT_REGIONS_COUNT   4
 扭曲网格中垂直区域的最大数量。
 
#define VPI_WARPGRID_MIN_REGION_WIDTH   64
 最小扭曲网格区域宽度。
 
#define VPI_WARPGRID_MIN_REGION_HEIGHT   16
 最小扭曲网格区域高度。
 

详细描述

定义了 VPIWarpMap 对象及相关函数。

扭曲映射保存从输出图像到输入图像的映射,用于 Remap 算法。 它允许密集和稀疏映射。


数据结构文档

◆ VPIWarpGrid

struct VPIWarpGrid

保存 VPI 的扭曲网格定义。

此结构定义了重映射操作目标图像中控制点的布局。

控制点用作从源图像到目标图像进行几何变换的基础。 其余点基于插值进行变换。 因此,控制点的密度控制了几何变换的质量。

这是定义图像中区域的示例

扭曲网格宽度
/ \
/ \
/ \
regionWidth[0] regionWidth[numHorizRegions-1]
/ \ / \
|------| |------|
-------------------------------- \
|******* ******* *******|-- \
|* . . * * * * *| \ \
|* . . * * * ... * *| regionHeight[0] \
|* . . * * * * *| / \
|******* ******* *******|-- \
| | \
| . . . |
| . . . | 扭曲网格高度
| . . . |
| | /
|******* ******* *******|-- /
|* * * * * *| \ /
|* * * * ... * *| regionHeight[numVertRegions-1] /
|* * * * * *| / /
|******* ******* *******|-- /
-------------------------------- /
int8_t numHorizRegions
水平区域的数量。
int8_t numVertRegions
垂直区域的数量。
int16_t regionWidth[VPI_WARPGRID_MAX_HORIZ_REGIONS_COUNT]
每个区域的宽度。
int16_t regionHeight[VPI_WARPGRID_MAX_VERT_REGIONS_COUNT]
每个区域的高度。

这是在一个区域中定义控制点的示例

*********
* + + *-- \
* + + *-- /
* *
*********
|--|
int16_t horizInterval[VPI_WARPGRID_MAX_HORIZ_REGIONS_COUNT]
给定区域内控制点之间的水平间距。
int16_t vertInterval[VPI_WARPGRID_MAX_VERT_REGIONS_COUNT]
给定区域内控制点之间的垂直间距。

这是一个 WxH 密集网格定义的示例

grid.numHorizRegions = 1;
grid.numVertRegions = 1;
grid.horizInterval[0] = 1;
grid.vertInterval[0] = 1;
grid.regionWidth[0] = W;
grid.regionHeight[0] = H;
保存 VPI 的扭曲网格定义。

限制

定义位于文件 WarpGrid.h156 行。

+ VPIWarpGrid 的协作图
数据字段
int8_t numHorizRegions 水平区域的数量。
int8_t numVertRegions 垂直区域的数量。
int16_t regionWidth[VPI_WARPGRID_MAX_HORIZ_REGIONS_COUNT] 每个区域的宽度。
int16_t regionHeight[VPI_WARPGRID_MAX_VERT_REGIONS_COUNT] 每个区域的高度。
int16_t horizInterval[VPI_WARPGRID_MAX_HORIZ_REGIONS_COUNT] 给定区域内控制点之间的水平间距。
  • 必须是二的幂。
  • 必须 >= 1。
  • 在 PVA 上,最大值为 128。
int16_t vertInterval[VPI_WARPGRID_MAX_VERT_REGIONS_COUNT] 给定区域内控制点之间的垂直间距。
  • 必须是二的幂。
  • 必须 >= 1。
  • 在 PVA 上,最大值为 128。

◆ VPIWarpMap

struct VPIWarpMap

定义了输入和输出图像像素之间的映射。

此结构用作 Remap 的输入。 它定义了输入图像中的控制点位置。 输出图像中的相应位置由扭曲网格定义隐式定义。

定义位于文件 WarpMap.h87 行。

+ VPIWarpMap 的协作图
数据字段
VPIWarpGrid grid 扭曲网格控制点结构定义。

它隐式定义了输出图像中的控制点位置。

int16_t numHorizPoints 水平点的数量。
int16_t numVertPoints 垂直点的数量。
int32_t pitchBytes 一个控制点与其正下方控制点之间的字节数。
  • 必须至少为 sizeof(VPIKeypointF32)*numHorizPoints
VPIKeypointF32 * keypoints 指向数组的指针,该数组包含输入图像中与输出图像中控制点位置相对应的控制点位置。

坐标是绝对的,(0,0) 是输出图像的左上角。

函数文档

◆ vpiWarpMapAllocData()

VPIStatus vpiWarpMapAllocData ( VPIWarpMap warpMap)

#include <vpi/WarpMap.h>

为给定的扭曲网格分配扭曲映射的控制点数组。

此函数将读取扭曲网格结构并分配适当大小的控制点数组,填充 VPIWarpMap 的 numHorizPoints、numVertPoints、strideBytes 和 keypoints 属性。 当不再需要时,扭曲映射必须由 vpiWarpMapFreeData 释放。

参数
[in,out]warpMap将要分配其关键点数组的扭曲映射。
  • 扭曲网格属性必须已填充网格结构。
  • 关键点必须为 NULL。
  • 除了网格和关键点之外的所有属性都将被覆盖。
返回值
VPI_ERROR_INVALID_ARGUMENTwarpMap 为 NULL。
VPI_ERROR_INVALID_ARGUMENT生成 warpMap 的参数无效。
VPI_SUCCESS操作执行成功。

◆ vpiWarpMapFreeData()

void vpiWarpMapFreeData ( VPIWarpMap warpMap)

#include <vpi/WarpMap.h>

释放由 vpiWarpMapAllocData 分配的扭曲映射控制点。

如果控制点数组为 NULL,则此函数不执行任何操作。 它将 numHorizPointsnumVertPointsstrideBytes 设置为零,并将 keypoints 设置为 NULL。

参数
[in,out]warpMap需要释放其控制点数组的扭曲映射。
返回值
VPI_ERROR_INVALID_ARGUMENTwarpMap 为 NULL。

◆ vpiWarpMapGenerateIdentity()

VPIStatus vpiWarpMapGenerateIdentity ( VPIWarpMap warpMap)

#include <vpi/WarpMap.h>

使用单位映射填充给定的扭曲映射。

如果用户想要指定自己的映射,此函数很有用。 它将控制点坐标设置为由扭曲网格隐式定义的目标坐标。 然后,用户可以遍历这些点并对每个点应用自定义映射函数。

参数
[in,out]warpMap具有已分配控制点数组的扭曲映射,将使用单位映射填充。
  • 必须先分配 WarpMap,然后才能生成单位映射。
返回值
VPI_ERROR_INVALID_ARGUMENTwarpMap 为 NULL。
VPI_ERROR_INVALID_ARGUMENTwarpMap 未分配。
VPI_SUCCESS操作执行成功。