VPI - 视觉编程接口

3.2 版本

OpenCVInterop.hpp
前往此文件的文档。
1 /*
2  * 版权所有 2020 NVIDIA Corporation。保留所有权利。
3  *
4  * 给被许可方的通知:
5  *
6  * 此源代码和/或文档(“许可交付物”)受美国和
7  * 国际版权法项下的 NVIDIA 知识产权保护。
8  *
9  * 此处包含的许可交付物是 NVIDIA 的专有和
10  * 机密信息,并根据 NVIDIA 与被许可方之间(“许可协议”)的 NVIDIA 软件许可协议条款和
11  * 条件或被许可方电子接受的协议提供。尽管许可协议中有任何相反的条款或条件,
12  * 未经 NVIDIA 明确书面同意,禁止向任何第三方复制或披露
13  * 许可交付物。
14  *
15  * 尽管许可协议中有任何相反的条款或条件,
16  * NVIDIA 对这些许可交付物用于任何目的的适用性不做任何陈述。
17  * 它们按“原样”提供,不附带任何明示或暗示的担保。
18  * NVIDIA 声明对这些许可交付物不作任何担保,
19  * 包括所有关于适销性、非侵权性以及适用于特定用途的暗示担保。
20  * 尽管许可协议中有任何相反的条款或条件,
21  * 在任何情况下,NVIDIA 均不对任何
22  * 特殊、间接、附带或后果性损害,或任何
23  * 因使用、数据或利润损失而导致的任何损害负责,
24  * 无论是在合同诉讼、过失或其他侵权行为中,
25  * 因使用或执行这些许可交付物而引起或与之相关的。
26  *
27  * 美国政府最终用户。这些许可交付物是
28  * “商业项目”,该术语在 48 C.F.R. 2.101(OCT
29  * 1995)中定义,包括“商业计算机软件”和“商业
30  * 计算机软件文档”,这些术语在 48
31  * C.F.R. 12.212(SEPT 1995)中使用,并且仅作为商业最终项目提供给美国政府。
32  * 与 48 C.F.R.12.212 和
33  * 48 C.F.R. 227.7202-1 至 227.7202-4(1995 年 6 月)一致,所有
34  * 美国政府最终用户均获得许可交付物,
35  * 仅具有此处规定的权利。
36  *
37  * 在个人和商业软件中对许可交付物的任何使用,都必须在用户文档和代码的内部
38  * 注释中包含上述免责声明和美国政府最终用户声明。
39  * 用户声明。
40  */
41 
48 #ifndef NV_VPI_OPENCV_INTEROP_HPP
49 #define NV_VPI_OPENCV_INTEROP_HPP
50 
51 #include "detail/OpenCVUtils.hpp"
52 
53 #include "Image.h"
54 
55 #include <opencv2/core/core.hpp>
56 
57 #include <vector>
58 
117 inline VPIStatus vpiImageCreateWrapperOpenCVMat(const cv::Mat &mat, VPIImageFormat fmt, uint64_t flags, VPIImage *img)
118 {
119  VPIImageData imgData = {};
120 
121  VPIStatus status = ::nv::vpi::detail::FillImageData(mat, fmt, &imgData);
122  if (status != VPI_SUCCESS)
123  {
124  return status;
125  }
126 
127  return vpiImageCreateWrapper(&imgData, nullptr, flags, img);
128 }
129 
166 inline VPIStatus vpiImageCreateWrapperOpenCVMat(const cv::Mat &mat, uint64_t flags, VPIImage *img)
167 {
168  VPIImageData imgData = {};
169  VPIStatus status = ::nv::vpi::detail::FillImageData(mat, &imgData);
170  if (status != VPI_SUCCESS)
171  {
172  return status;
173  }
174 
175  return vpiImageCreateWrapper(&imgData, nullptr, flags, img);
176 }
177 
207 inline VPIStatus vpiImageSetWrappedOpenCVMat(VPIImage img, const cv::Mat &mat)
208 {
209  VPIImageFormat fmt;
210  VPIStatus status = vpiImageGetFormat(img, &fmt);
211  if (status != VPI_SUCCESS)
212  {
213  return status;
214  }
215 
216  VPIImageData imgData = {};
217  status = ::nv::vpi::detail::FillImageData(mat, fmt, &imgData);
218  if (status != VPI_SUCCESS)
219  {
220  return status;
221  }
222 
223  return vpiImageSetWrapper(img, &imgData);
224 }
225 
263 inline VPIStatus vpiImageCreateWrapperOpenCVMatPlanes(const std::vector<cv::Mat> &matPlanes, VPIImageFormat fmt,
264  uint64_t flags, VPIImage *img)
265 {
266  VPIImageData imgData = {};
267  VPIStatus status = ::nv::vpi::detail::FillImageData(matPlanes, fmt, &imgData);
268  if (status != VPI_SUCCESS)
269  {
270  return status;
271  }
272 
273  return vpiImageCreateWrapper(&imgData, nullptr, flags, img);
274 }
275 
304 inline VPIStatus vpiImageSetWrappedOpenCVMatPlanes(VPIImage img, const std::vector<cv::Mat> &matPlanes)
305 {
306  VPIImageFormat fmt;
307  VPIStatus status = vpiImageGetFormat(img, &fmt);
308  if (status != VPI_SUCCESS)
309  {
310  return status;
311  }
312 
313  VPIImageData imgData = {};
314  status = ::nv::vpi::detail::FillImageData(matPlanes, fmt, &imgData);
315  if (status != VPI_SUCCESS)
316  {
317  return status;
318  }
319 
320  return vpiImageSetWrapper(img, &imgData);
321 }
322 
346 inline VPIStatus vpiImageDataExportOpenCVMat(const VPIImageData &imgData, cv::Mat *mat)
347 {
348  if (mat == NULL)
349  {
351  }
352 
353  return ::nv::vpi::detail::ExportOpenCVMat(imgData, *mat);
354 }
355 
375 inline VPIStatus vpiImageDataExportOpenCVMatPlanes(const VPIImageData &imgData, std::vector<cv::Mat> *matPlanes)
376 {
377  if (matPlanes == NULL)
378  {
380  }
381 
382  return ::nv::vpi::detail::ExportOpenCVMatPlanes(imgData, *matPlanes);
383 }
384 
405 inline VPIStatus vpiImageDataImportOpenCVMat(const cv::Mat &mat, VPIImageData *imgData)
406 {
407  if (imgData == NULL)
408  {
410  }
411 
412  return ::nv::vpi::detail::FillImageData(mat, imgData);
413 }
414 
440 inline VPIStatus vpiImageDataImportOpenCVMat(const cv::Mat &mat, VPIImageFormat fmt, VPIImageData *imgData)
441 {
442  if (imgData == NULL)
443  {
445  }
446 
447  return ::nv::vpi::detail::FillImageData(mat, fmt, imgData);
448 }
449 
480 inline VPIStatus vpiImageDataImportOpenCVMatPlanes(const std::vector<cv::Mat> &matPlanes, VPIImageFormat fmt,
481  VPIImageData *imgData)
482 {
483  if (imgData == NULL)
484  {
486  }
487 
488  return ::nv::vpi::detail::FillImageData(matPlanes, fmt, imgData);
489 }
490 
493 #endif // NV_VPI_OPENCV_INTEROP_HPP
Image.h
用于处理 VPI 图像的函数和结构。
VPIImageFormat
uint64_t VPIImageFormat
预定义的图像格式。
VPIImage
struct VPIImageImpl * VPIImage
VPIStatus vpiImageCreateWrapper(const VPIImageData *data, const VPIImageWrapperParams *params, uint64_t flags, VPIImage *img)
通过包装现有的内存块来创建图像对象。
vpiImageSetWrapper
在现有的 VPIImage 包装器中重新定义包装的内存。
vpiImageGetFormat
VPIStatus vpiImageGetFormat(VPIImage img, VPIImageFormat *format)
VPIImageData
存储有关图像特征和内容的信息。
vpiImageCreateWrapperOpenCVMatPlanes
VPIStatus vpiImageCreateWrapperOpenCVMatPlanes(const std::vector< cv::Mat > &matPlanes, VPIImageFormat fmt, uint64_t flags, VPIImage *img)
VPIStatus vpiImageDataExportOpenCVMat(const VPIImageData &imgData, cv::Mat *mat)
使用来自锁定 VPIImage 的 VPIImageData 的数据填充现有的 cv::Mat。
VPIStatus vpiImageSetWrappedOpenCVMat(VPIImage img, const cv::Mat &mat)
重新定义现有 VPIImage 包装器的包装 cv::Mat。
VPIStatus vpiImageSetWrappedOpenCVMatPlanes(VPIImage img, const std::vector< cv::Mat > &matPlanes)
用新的 cv::Mat 平面替换包装的 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 vpiImageDataImportOpenCVMatPlanes(const std::vector< cv::Mat > &matPlanes, VPIImageFormat fmt, VPIImageData *imgData)
使用描述给定 VPIImageData 中所有平面的 cv::Mat 向量填充,强制使用给定的图像格式...
状态代码。
定义: Status.h:81
VPI_SUCCESS
操作成功完成。
定义: Status.h:82
VPI_ERROR_INVALID_ARGUMENT
@ VPI_ERROR_INVALID_ARGUMENT
无效的参数,范围错误或值不被接受。
定义: Status.h:84
开发者主页
博客
资源