Graph API

Graph API {#gapi}

Introduction {#gapi_root_intro}

OpenCV Graph API (or G-API) is a new OpenCV module targeted to make
regular image processing fast and portable. These two goals are
achieved by introducing a new graph-based model of execution.

G-API is a special module in OpenCV – in contrast with the majority
of other main modules, this one acts as a framework rather than some
specific CV algorithm. G-API provides means to define CV operations,
construct graphs (in form of expressions) using it, and finally
implement and run the operations for a particular backend.

@note G-API is a new module and now is in active development. It’s API
is volatile at the moment and there may be minor but
compatibility-breaking changes in the future.

Contents

G-API documentation is organized into the following chapters:

  • @subpage gapi_purposes

    The motivation behind G-API and its goals.

  • @subpage gapi_hld

    General overview of G-API architecture and its major internal
    components.

  • @subpage gapi_kernel_api

    Learn how to introduce new operations in G-API and implement it for
    various backends.

  • @subpage gapi_impl

    Low-level implementation details of G-API, for those who want to
    contribute.

  • API Reference: functions and classes

    • @subpage gapi_core

      Core G-API operations - arithmetic, boolean, and other matrix
      operations;

    • @subpage gapi_imgproc

      Image processing functions: color space conversions, various
      filters, etc.

API Example {#gapi_example}

A very basic example of G-API pipeline is shown below:

@include modules/gapi/samples/api_example.cpp

G-API is a separate OpenCV module so its header files have to be
included explicitly. The first four lines of main() create and
initialize OpenCV’s standard video capture object, which fetches
video frames from either an attached camera or a specified file.

G-API pipeline is constructed next. In fact, it is a series of G-API
operation calls on cv::GMat data. The important aspect of G-API is
that this code block is just a declaration of actions, but not the
actions themselves. No processing happens at this point, G-API only
tracks which operations form pipeline and how it is connected. G-API
Data objects (here it is cv::GMat) are used to connect operations
each other. in is an empty cv::GMat signalling that it is a
beginning of computation.

After G-API code is written, it is captured into a call graph with
instantiation of cv::GComputation object. This object takes
input/output data references (in this example, in and out
cv::GMat objects, respectively) as parameters and reconstructs the
call graph based on all the data flow between in and out.

cv::GComputation is a thin object in sense that it just captures which
operations form up a computation. However, it can be used to execute
computations – in the following processing loop, every captured frame (a
cv::Mat input_frame) is passed to cv::GComputation::apply().

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ugbFRbeY-1642432392850)(pics/demo.jpg)]

cv::GComputation::apply() is a polimorphic method which accepts a
variadic number of arguments. Since this computation is defined on one
input, one output, a special overload of cv::GComputation::apply() is
used to pass input data and get output data.

Internally, cv::GComputation::apply() compiles the captured graph for
the given input parameters and executes the compiled graph on data
immediately.

There is a number important concepts can be outlines with this example:

  • Graph declaration and graph execution are distinct steps;
  • Graph is built implicitly from a sequence of G-API expressions;
  • G-API supports function-like calls – e.g. cv::gapi::resize(), and
    operators, e.g operator|() which is used to compute bitwise OR;
  • G-API syntax aims to look pure: every operation call within a graph
    yields a new result, thus forming a directed acyclic graph (DAG);
  • Graph declaration is not bound to any data – real data objects
    (cv::Mat) come into picture after the graph is already declared.

See [tutorials and porting examples](@ref tutorial_table_of_content_gapi)
to learn more on various G-API features and concepts.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值