OpenCV 4.10.0
开源计算机视觉
|
OpenCV 图形 API(或 G-API)是 OpenCV 的一个新模块,旨在使常规图像处理快速且可移植。通过引入新的基于图形的执行模型,这两个目标得以实现。
G-API 是 OpenCV 中的一个特殊模块 - 与大多数其他主模块不同,它充当框架而不是某些特定的 CV 算法。G-API 提供了定义 CV 操作、使用它构建图形(以表达式的形式),以及最后为特定后端实现和运行操作的方法。
G-API 文档按以下章节组织
G-API 背后的动机及其目标。
G-API 架构及其主要内部组件的总体概述。
了解如何在 G-API 中引入新操作并为各种后端实现它。
G-API 的底层实现细节,供那些想要贡献的人员使用。
核心 G-API 类、数据类型、后端等。
核心 G-API 操作 - 算术、布尔和其它矩阵操作;
图像处理函数:颜色空间转换、各种滤波器等。
视频处理功能。
绘制和合成功能
下面显示了一个非常基本的 G-API 管道示例
G-API 是一个独立的 OpenCV 模块,因此必须显式包含其头文件。main()
的前四行创建并初始化 OpenCV 的标准视频捕获对象,该对象从连接的相机或指定的文件中获取视频帧。
接下来构建 G-API 管道。实际上,它是一系列对 cv::GMat 数据的 G-API 操作调用。G-API 的重要方面是此代码块只是一个动作声明,而不是动作本身。此时不会发生任何处理,G-API 只跟踪哪些操作构成管道以及它是如何连接的。G-API 数据对象(这里指的是 cv::GMat)用于将操作彼此连接。in
是一个空 cv::GMat,表示它是计算的起点。
在编写 G-API 代码后,它会通过实例化 cv::GComputation 对象被捕获到调用图中。该对象采用输入/输出数据引用(在此示例中,分别为 in
和 out
cv::GMat 对象)作为参数,并根据 in
和 out
之间的所有数据流来重建调用图。
cv::GComputation 在某种意义上是一个薄对象,因为它只捕获哪些操作构成计算。但是,它可以用来执行计算 - 在下面的处理循环中,每个捕获的帧(一个 cv::Mat input_frame
)都会传递给 cv::GComputation::apply()。
cv::GComputation::apply() 是一种多态方法,它接受可变数量的参数。由于此计算是在一个输入、一个输出上定义的,因此使用了 cv::GComputation::apply() 的一个特殊重载来传递输入数据并获取输出数据。
在内部,cv::GComputation::apply() 会为给定的输入参数编译捕获的图,并立即在数据上执行编译后的图。
此示例中可以概述几个重要的概念
参见 教程和移植示例,了解有关各种 G-API 功能和概念的更多信息。