VPI - 视觉编程接口

3.2 版本

OpenCV 互操作性

与 OpenCV 库的互操作性。 更多...

函数

VPIStatus vpiImageCreateWrapperOpenCVMat (const cv::Mat &mat, VPIImageFormat fmt, uint64_t flags, VPIImage *img)
 使用给定的图像格式将 cv::Mat 封装到 VPIImage 中。 更多...
 
VPIStatus vpiImageCreateWrapperOpenCVMat (const cv::Mat &mat, uint64_t flags, VPIImage *img)
 cv::Mat 封装到 VPIImage 中,并从其类型推断图像格式。 更多...
 
VPIStatus vpiImageSetWrappedOpenCVMat (VPIImage img, const cv::Mat &mat)
 重新定义现有 VPIImage 封装器的封装 cv::Mat更多...
 
VPIStatus vpiImageCreateWrapperOpenCVMatPlanes (const std::vector< cv::Mat > &matPlanes, VPIImageFormat fmt, uint64_t flags, VPIImage *img)
 cv::Mat 向量封装到 VPIImage 中,每个 cv::Mat 代表一个图像平面。 更多...
 
VPIStatus vpiImageSetWrappedOpenCVMatPlanes (VPIImage img, const std::vector< cv::Mat > &matPlanes)
 用新的平面替换封装的 cv::Mat 平面。 更多...
 
VPIStatus vpiImageDataExportOpenCVMat (const VPIImageData &imgData, cv::Mat *mat)
 使用来自锁定 VPIImageVPIImageData 中的数据填充现有的 cv::Mat更多...
 
VPIStatus vpiImageDataExportOpenCVMatPlanes (const VPIImageData &imgData, std::vector< cv::Mat > *matPlanes)
 使用来自 VPIImageData 的所有平面填充 cv::Mat 向量。 更多...
 
VPIStatus vpiImageDataImportOpenCVMat (const cv::Mat &mat, VPIImageData *imgData)
 使用给定的 cv::Mat 中的数据填充现有的 VPIImageData更多...
 
VPIStatus vpiImageDataImportOpenCVMat (const cv::Mat &mat, VPIImageFormat fmt, VPIImageData *imgData)
 使用给定的 cv::Mat 中的数据填充现有的 VPIImageData,强制使用给定的图像格式。 更多...
 
VPIStatus vpiImageDataImportOpenCVMatPlanes (const std::vector< cv::Mat > &matPlanes, VPIImageFormat fmt, VPIImageData *imgData)
 使用描述给定 VPIImageData 中所有平面的 cv::Mat 向量填充,强制使用给定的图像格式。 更多...
 

详细描述

与 OpenCV 库的互操作性。

VPI 允许与 OpenCV 轻松互操作。这使得将现有的 cv::Mat 对象封装到 VPIImage 中以在 VPI 管道中使用变得容易。

也可以从 VPIImageData 创建 cv::Mat

函数文档

◆ vpiImageCreateWrapperOpenCVMat() [1/2]

VPIStatus vpiImageCreateWrapperOpenCVMat ( const cv::Mat &  mat,
VPIImageFormat  fmt,
uint64_t  flags,
VPIImage img 
)
inline

#include <vpi/OpenCVInterop.hpp>

使用给定的图像格式将 cv::Mat 封装到 VPIImage 中。

它还封装了 cv::cvtColor 理解的 4:2:2 (packed and semi-planar) 和 4:2:0 (semi-planar) 格式的 YUV 图像。

VPIImage 仍在封装 cv::Mat 时,不得销毁 cv::Mat。 否则会导致未定义的行为。

参数
[输入]mat要封装的 OpenCV 矩阵。
  • 不能为空。
  • 维度数必须为 2。
[输入]fmtmat 关联的图像格式。
  • 格式必须与 mat 的维度和类型一致。
[输入]flags指定图像所需特性的位字段。 VPI_BACKEND_CPU 标志始终在内部添加。
  • 该字段必须是零个或多个以下标志的组合
    • VPIBackend 标志。 此图像可用于在这些后端运行的算法。 如果没有传递后端标志,它将考虑活动 VPIContext 支持的所有后端,但禁用与给定图像参数不兼容的后端。
    • 通用对象标志.
  • 如果给定了后端,则必须在当前上下文中启用它们。
[输出]img指向将接收创建的图像句柄的内存的指针。
返回值
VPI_ERROR_INVALID_IMAGE_FORMATfmt 无效或与 mat 不一致。
VPI_ERROR_INVALID_ARGUMENTmat 为空或具有错误的维度数。
VPI_ERROR_INVALID_ARGUMENT输出 img 为 NULL。
VPI_ERROR_OUT_OF_MEMORY没有足够的资源来创建图像。
VPI_ERROR_INVALID_CONTEXT当前上下文已销毁。
VPI_ERROR_INVALID_OPERATION请求的后端在当前上下文中未启用。
VPI_SUCCESS操作执行成功。

定义于 117 行,文件 OpenCVInterop.hpp

+ 这是此函数的调用图

◆ vpiImageCreateWrapperOpenCVMat() [2/2]

VPIStatus vpiImageCreateWrapperOpenCVMat ( const cv::Mat &  mat,
uint64_t  flags,
VPIImage img 
)
inline

#include <vpi/OpenCVInterop.hpp>

cv::Mat 封装到 VPIImage 中,并从其类型推断图像格式。

推断图像类型的规则是

  • 无符号和浮点 3 通道图像被视为 BGR
  • 无符号和浮点 4 通道图像被视为 BGRA
  • 其他类型映射到具有相同像素布局的非彩色 vpi 图像格式。

VPIImage 仍在封装 cv::Mat 时,不得销毁 cv::Mat。 否则会导致未定义的行为。

参数
[输入]mat要封装的 OpenCV 矩阵。
  • 维度数必须为 2。
[输入]flags指定图像所需特性的位字段。 VPI_BACKEND_CPU 标志始终在内部添加。
  • 该字段必须是零个或多个以下标志的组合
    • VPIBackend 标志。 此图像可用于在这些后端运行的算法。 如果没有传递后端标志,它将考虑活动 VPIContext 支持的所有后端,但禁用与给定图像参数不兼容的后端。
    • 通用对象标志
  • 如果给定了后端,则必须在当前上下文中启用它们。
[输出]img指向将接收创建的图像句柄的内存的指针。
返回值
VPI_ERROR_INVALID_IMAGE_FORMAT不支持 mat 类型。
VPI_ERROR_INVALID_ARGUMENTmat 为空或具有错误的维度数。
VPI_ERROR_INVALID_ARGUMENT输出 img 为 NULL。
VPI_ERROR_OUT_OF_MEMORY没有足够的资源来创建图像。
VPI_ERROR_INVALID_CONTEXT当前上下文已销毁。
VPI_ERROR_INVALID_OPERATION请求的后端在当前上下文中未启用。
VPI_SUCCESS操作执行成功。

定义于 166 行,文件 OpenCVInterop.hpp

+ 这是此函数的调用图

◆ vpiImageSetWrappedOpenCVMat()

VPIStatus vpiImageSetWrappedOpenCVMat ( VPIImage  img,
const cv::Mat &  mat 
)
inline

#include <vpi/OpenCVInterop.hpp>

重新定义现有 VPIImage 封装器的封装 cv::Mat

新的 cv::Mat 必须具有与正在封装的现有 cv::Mat 相同的特性(类型和维度)。

此操作是高效的,不会分配内存。 封装的内存将可供封装器创建期间指定的相同后端访问。

封装的 cv::Mat 在仍然被封装时必须有效。

参数
[输入]img图像句柄。
[输入]mat要封装的 cv::Mat 对象。
  • 维度数必须为 2。
  • 现有的封装图像和 mat 必须具有相同的维度和兼容的格式。
返回值
VPI_ERROR_INVALID_ARGUMENTmat 为空或具有错误的维度数。
VPI_ERROR_INVALID_ARGUMENT输出 img 为 NULL。
VPI_ERROR_INVALID_IMAGE_FORMAT不支持 mat 类型。
VPI_ERROR_INVALID_OPERATIONmat 的维度和/或格式与 img 不匹配。
VPI_ERROR_INVALID_OPERATIONimg 已锁定。
VPI_ERROR_INVALID_OPERATIONimg 不是由 vpiImageCreateWrapperOpenCVMatvpiImageCreateWrapper 使用正确的缓冲区类型创建的。
VPI_SUCCESS操作执行成功。

定义于 207 行,文件 OpenCVInterop.hpp

+ 这是此函数的调用图

◆ vpiImageCreateWrapperOpenCVMatPlanes()

VPIStatus vpiImageCreateWrapperOpenCVMatPlanes ( const std::vector< cv::Mat > &  matPlanes,
VPIImageFormat  fmt,
uint64_t  flags,
VPIImage img 
)
inline

#include <vpi/OpenCVInterop.hpp>

cv::Mat 向量封装到 VPIImage 中,每个 cv::Mat 代表一个图像平面。

VPIImage 仍在封装它时,不得销毁封装的 cv::Mat。 不使用 std::vector 对象本身,因此可以销毁它,甚至可以是临时的。 未能保持 cv::Mat 分配会导致未定义的行为。

参数
[输入]matPlanescv::Mat 向量,每个向量代表一个图像平面。
  • 向量不能为空。
  • 每个平面中的 cv::Mat 不能为空。
  • cv::Mat 维度数必须为 2。
[输入]fmtmatPlanes 关联的图像格式。
  • 格式必须与 matPlanes 一致。 即,fmt 中的平面数必须与 matPlanes 大小匹配,并且每个平面必须与相应的 cv::Mat 类型一致。
[输入]flags指定图像所需特性的位字段。 VPI_BACKEND_CPU 标志始终在内部添加。
  • 该字段必须是零个或多个以下标志的组合
    • VPIBackend 标志。 此图像可用于在这些后端运行的算法。 如果没有传递后端标志,它将考虑活动 VPIContext 支持的所有后端,但禁用与给定图像参数不兼容的后端。
    • 通用对象标志
  • 如果给定了后端,则必须在当前上下文中启用它们。
[输出]img指向将接收创建的图像句柄的内存的指针。
返回值
VPI_ERROR_INVALID_IMAGE_FORMAT不支持 fmt
VPI_ERROR_INVALID_IMAGE_FORMATmatPlanes 类型与 fmt 不一致。
VPI_ERROR_INVALID_ARGUMENTmatPlanes 中的某些 cv::Mat 为空,或者 matPlanes 为空。
VPI_ERROR_INVALID_OPERATION请求的后端在当前上下文中未启用。
VPI_SUCCESS操作执行成功。

定义于 263 行,文件 OpenCVInterop.hpp

+ 这是此函数的调用图

◆ vpiImageSetWrappedOpenCVMatPlanes()

VPIStatus vpiImageSetWrappedOpenCVMatPlanes ( VPIImage  img,
const std::vector< cv::Mat > &  matPlanes 
)
inline

#include <vpi/OpenCVInterop.hpp>

用新的平面替换封装的 cv::Mat 平面。

新的 cv::Mat 向量必须具有相同的大小,并且包含的 cv::Mat 必须具有与正在封装的现有 cv::Mat 相同的特性(类型和维度)。

VPIImage 必须由 vpiImageCreateWrapperOpenCVMatPlanes 创建。

此操作是高效的,不会分配内存。 封装的内存将可供封装器创建期间指定的相同后端访问。

封装的 cv::Mat 在仍然被封装时必须有效。 std::vector 对象本身可以销毁,甚至可以是临时的。

参数
[输入]img图像句柄。
[输入]matPlanescv::Mat 向量,每个向量代表一个图像平面。
返回值
VPI_ERROR_INVALID_IMAGE_FORMAT不支持图像格式。
VPI_ERROR_INVALID_ARGUMENT输入 matPlanes 为 NULL。
VPI_ERROR_INVALID_ARGUMENT输入 imgData 为 NULL。
VPI_ERROR_INVALID_OPERATIONimg 不是由 vpiImageCreateWrapperOpenCVMatvpiImageCreateWrapper 使用正确的缓冲区类型创建的。
VPI_SUCCESS操作执行成功。

定义于 304 行,文件 OpenCVInterop.hpp

+ 这是此函数的调用图

◆ vpiImageDataExportOpenCVMat()

VPIStatus vpiImageDataExportOpenCVMat ( const VPIImageData imgData,
cv::Mat *  mat 
)
inline

#include <vpi/OpenCVInterop.hpp>

使用来自锁定 VPIImageVPIImageData 中的数据填充现有的 cv::Mat

不会复制任何图像内容,它们仅由 cv::Mat 引用。 结果可用于 OpenCV 操作。

如果 imgData 具有 2 个或 3 个在内存中连续并且表示 cv::cvtColor 理解的某些多平面格式(例如 NV12 或 YUV422)的平面,则将填充结果 mat,以便 cv::cvtColor 将其理解为具有这些类型。 换句话说,它们可以与 cv::COLOR_YUV2RGB_NV12COLOR_YUV2RGB_UYVY 一起使用。

参数
[输入]imgDataVPIImageData 的引用,由 vpiImageLockData 返回。 如果平面的像素类型为 VPI_PIXEL_TYPE_DEFAULT,则将从给定的图像格式推断它。
  • 图像格式必须可由 cv::Mat 表示。
[输出]mat将引用 imgData 内容的 cv::Mat
  • 强制性,不能为空。
返回值
VPI_ERROR_INVALID_ARGUMENT输出 mat 为 NULL。
VPI_ERROR_INVALID_IMAGE_FORMATimgData 无效。
VPI_SUCCESS操作执行成功。

定义于 346 行,文件 OpenCVInterop.hpp

◆ vpiImageDataExportOpenCVMatPlanes()

VPIStatus vpiImageDataExportOpenCVMatPlanes ( const VPIImageData imgData,
std::vector< cv::Mat > *  matPlanes 
)
inline

#include <vpi/OpenCVInterop.hpp>

使用来自 VPIImageData 的所有平面填充 cv::Mat 向量。

不会复制任何图像内容,它们仅由 cv::Mat 引用。 结果可用于 OpenCV 操作。

参数
[输入]imgDataVPIImageData 的引用,由 vpiImageLockData 返回。 如果平面的像素类型为 VPI_PIXEL_TYPE_DEFAULT,则将从给定的图像格式推断它。
[输出]matPlanescv::Mat 向量,每个向量封装 imgData 中的一个图像平面。
  • 强制性,不能为空。
返回值
VPI_ERROR_INVALID_ARGUMENT输出 matPlanes 为 NULL。
VPI_ERROR_INVALID_IMAGE_FORMATimgData 无效。
VPI_SUCCESS操作执行成功。

定义于 375 行,文件 OpenCVInterop.hpp

◆ vpiImageDataImportOpenCVMat() [1/2]

VPIStatus vpiImageDataImportOpenCVMat ( const cv::Mat &  mat,
VPIImageData imgData 
)
inline

#include <vpi/OpenCVInterop.hpp>

使用给定的 cv::Mat 中的数据填充现有的 VPIImageData

它执行 vpiImageDataExportOpenCVMat 的逆操作。 请参阅此函数的描述,了解用于图像格式推断的标准。

参数
[输入]matcv::Mat 的引用,其中包含要填充到输出中的信息
  • 不能为空。
  • cv::Mat 维度数等于 2。
[输出]imgDataVPIImageData 将被填充。 现有内容将被丢弃。
  • 强制性,不能为空。
返回值
VPI_ERROR_INVALID_ARGUMENT输入 mat 为空。
VPI_ERROR_INVALID_ARGUMENTmat 具有错误的维度数。
VPI_ERROR_INVALID_ARGUMENTimgData 为 NULL。
VPI_SUCCESS操作执行成功。

定义于 405 行,文件 OpenCVInterop.hpp

◆ vpiImageDataImportOpenCVMat() [2/2]

VPIStatus vpiImageDataImportOpenCVMat ( const cv::Mat &  mat,
VPIImageFormat  fmt,
VPIImageData imgData 
)
inline

#include <vpi/OpenCVInterop.hpp>

使用给定的 cv::Mat 中的数据填充现有的 VPIImageData,强制使用给定的图像格式。

它执行 vpiImageDataExportOpenCVMat 的逆操作。 请参阅此函数的描述,了解用于图像格式推断的标准。

参数
[输入]matcv::Mat 的引用,其中包含要填充到输出中的信息
  • 不能为空。
  • cv::Mat 维度数等于 2。
[输入]fmt与 mat 关联的图像格式。
  • 它必须与 mat 的维度和类型一致。
[输出]imgDataVPIImageData 将被填充。 现有内容将被丢弃。
  • 强制性,不能为空。
返回值
VPI_ERROR_INVALID_ARGUMENT输入 mat 为空。
VPI_ERROR_INVALID_ARGUMENTimgData 为 NULL。
VPI_ERROR_INVALID_ARGUMENTmat 具有错误的维度数。
VPI_ERROR_INVALID_IMAGE_FORMATfmtmat 不一致。
VPI_SUCCESS操作执行成功。

定义于 440 行,文件 OpenCVInterop.hpp

◆ vpiImageDataImportOpenCVMatPlanes()

VPIStatus vpiImageDataImportOpenCVMatPlanes ( const std::vector< cv::Mat > &  matPlanes,
VPIImageFormat  fmt,
VPIImageData imgData 
)
inline

#include <vpi/OpenCVInterop.hpp>

使用描述给定 VPIImageData 中所有平面的 cv::Mat 向量填充,强制使用给定的图像格式。

它执行 vpiImageDataExportOpenCVMatPlanes 的逆操作。 请参阅此函数的描述,了解用于图像格式推断的标准。

图像格式不是从输入 cv::Mat 推断出来的,而是由用户给出的。 如果格式与 cv::Mat 不兼容,则会返回错误。

参数
[输入]matPlanescv::Mat 向量,每个向量描述一个平面。
  • 不能为空。
  • 每个平面中的 cv::Mat 不能为空。
  • 每个平面中的 cv::Mat 维度数必须等于 2。
[输入]fmt与 matPlanes 关联的图像格式。
  • 它必须与 matPlanes 大小以及包含的 cv::Mat 的维度和类型一致。
[输出]imgDataVPIImageData 将被填充。 现有内容将被丢弃。
  • 强制性,不能为空。
返回值
VPI_ERROR_INVALID_ARGUMENTimgData 为 NULL。
VPI_ERROR_INVALID_ARGUMENTmatPlanes 为空。
VPI_ERROR_INVALID_ARGUMENTmatPlanes 中的某些 cv::Mat 为空或具有错误的维度数。
VPI_ERROR_INVALID_IMAGE_FORMATfmtmatPlanes 不一致。
VPI_SUCCESS操作执行成功。

定义于 480 行,文件 OpenCVInterop.hpp