GComputation

Struct GComputation 

Source
pub struct GComputation { /* private fields */ }
Expand description

GComputation class represents a captured computation graph. GComputation objects form boundaries for expression code user writes with G-API, allowing to compile and execute it.

G-API computations are defined with input/output data objects. G-API will track automatically which operations connect specified outputs to the inputs, forming up a call graph to be executed. The below example expresses calculation of Sobel operator for edge detection (inline formula):

graph_def

Full pipeline can be now captured with this object declaration:

graph_cap_full

Input/output data objects on which a call graph should be reconstructed are passed using special wrappers cv::GIn and cv::GOut. G-API will track automatically which operations form a path from inputs to outputs and build the execution graph appropriately.

Note that cv::GComputation doesn’t take ownership on data objects it is defined. Moreover, multiple GComputation objects may be defined on the same expressions, e.g. a smaller pipeline which expects that image gradients are already pre-calculated may be defined like this:

graph_cap_sub

The resulting graph would expect two inputs and produce one output. In this case, it doesn’t matter if gx/gy data objects are results of cv::gapi::Sobel operators – G-API will stop unrolling expressions and building the underlying graph one reaching this data objects.

The way how GComputation is defined is important as its definition specifies graph protocol – the way how the graph should be used. Protocol is defined by number of inputs, number of outputs, and shapes of inputs and outputs.

In the above example, sobelEdge expects one Mat on input and produces one Mat; while sobelEdgeSub expects two Mats on input and produces one Mat. GComputation’s protocol defines how other computation methods should be used – cv::GComputation::compile() and cv::GComputation::apply(). For example, if a graph is defined on two GMat inputs, two cv::Mat objects have to be passed to apply() for execution. GComputation checks protocol correctness in runtime so passing a different number of objects in apply() or passing cv::Scalar instead of cv::Mat there would compile well as a C++ source but raise an exception in run-time. G-API also comes with a typed wrapper cv::GComputationT<> which introduces this type-checking in compile-time.

cv::GComputation itself is a thin object which just captures what the graph is. The compiled graph (which actually process data) is represented by class GCompiled. Use compile() method to generate a compiled graph with given compile options. cv::GComputation can also be used to process data with implicit graph compilation on-the-fly, see apply() for details.

GComputation is a reference-counted object – once defined, all its copies will refer to the same instance.

§See also

GCompiled

Implementations§

Source§

impl GComputation

Source

pub fn new(in_: impl GMatTrait, out: impl GMatTrait) -> Result<GComputation>

Defines an unary (one input – one output) computation

Generic GComputation constructor.

Constructs a new graph with a given protocol, specified as a flow of operations connecting input/output objects. Throws if the passed boundaries are invalid, e.g. if there’s no functional dependency (path) between given outputs and inputs.

§Parameters
  • ins: Input data vector.
  • outs: Output data vector.

Note: Don’t construct GProtoInputArgs/GProtoOutputArgs objects directly, use cv::GIn()/cv::GOut() wrapper functions instead.

§See also

[gapi_data_objects]

§Overloaded parameters
  • in: input GMat of the defined unary computation
  • out: output GMat of the defined unary computation
Source

pub fn new_1( in_: impl GMatTrait, out: impl GScalarTrait, ) -> Result<GComputation>

Defines an unary (one input – one output) computation

Generic GComputation constructor.

Constructs a new graph with a given protocol, specified as a flow of operations connecting input/output objects. Throws if the passed boundaries are invalid, e.g. if there’s no functional dependency (path) between given outputs and inputs.

§Parameters
  • ins: Input data vector.
  • outs: Output data vector.

Note: Don’t construct GProtoInputArgs/GProtoOutputArgs objects directly, use cv::GIn()/cv::GOut() wrapper functions instead.

§See also

[gapi_data_objects]

§Overloaded parameters
  • in: input GMat of the defined unary computation
  • out: output GScalar of the defined unary computation
Source

pub fn new_2( in1: impl GMatTrait, in2: impl GMatTrait, out: impl GMatTrait, ) -> Result<GComputation>

Defines a binary (two inputs – one output) computation

Generic GComputation constructor.

Constructs a new graph with a given protocol, specified as a flow of operations connecting input/output objects. Throws if the passed boundaries are invalid, e.g. if there’s no functional dependency (path) between given outputs and inputs.

§Parameters
  • ins: Input data vector.
  • outs: Output data vector.

Note: Don’t construct GProtoInputArgs/GProtoOutputArgs objects directly, use cv::GIn()/cv::GOut() wrapper functions instead.

§See also

[gapi_data_objects]

§Overloaded parameters
  • in1: first input GMat of the defined binary computation
  • in2: second input GMat of the defined binary computation
  • out: output GMat of the defined binary computation
Source

pub fn new_3( in1: impl GMatTrait, in2: impl GMatTrait, out: impl GScalarTrait, ) -> Result<GComputation>

Defines a binary (two inputs – one output) computation

Generic GComputation constructor.

Constructs a new graph with a given protocol, specified as a flow of operations connecting input/output objects. Throws if the passed boundaries are invalid, e.g. if there’s no functional dependency (path) between given outputs and inputs.

§Parameters
  • ins: Input data vector.
  • outs: Output data vector.

Note: Don’t construct GProtoInputArgs/GProtoOutputArgs objects directly, use cv::GIn()/cv::GOut() wrapper functions instead.

§See also

[gapi_data_objects]

§Overloaded parameters
  • in1: first input GMat of the defined binary computation
  • in2: second input GMat of the defined binary computation
  • out: output GScalar of the defined binary computation
Source

pub fn new_4(ins: &Vector<GMat>, outs: &Vector<GMat>) -> Result<GComputation>

Defines a computation with arbitrary input/output number.

Generic GComputation constructor.

Constructs a new graph with a given protocol, specified as a flow of operations connecting input/output objects. Throws if the passed boundaries are invalid, e.g. if there’s no functional dependency (path) between given outputs and inputs.

§Parameters
  • ins: Input data vector.
  • outs: Output data vector.

Note: Don’t construct GProtoInputArgs/GProtoOutputArgs objects directly, use cv::GIn()/cv::GOut() wrapper functions instead.

§See also

[gapi_data_objects]

§Overloaded parameters
  • ins: vector of inputs GMats for this computation
  • outs: vector of outputs GMats for this computation

Use this overload for cases when number of computation inputs/outputs is not known in compile-time – e.g. when graph is programmatically generated to build an image pyramid with the given number of levels, etc.

Trait Implementations§

Source§

impl Boxed for GComputation

Source§

unsafe fn from_raw( ptr: <GComputation as OpenCVFromExtern>::ExternReceive, ) -> Self

Wrap the specified raw pointer Read more
Source§

fn into_raw(self) -> <GComputation as OpenCVTypeExternContainer>::ExternSendMut

Return the underlying raw pointer while consuming this wrapper. Read more
Source§

fn as_raw(&self) -> <GComputation as OpenCVTypeExternContainer>::ExternSend

Return the underlying raw pointer. Read more
Source§

fn as_raw_mut( &mut self, ) -> <GComputation as OpenCVTypeExternContainer>::ExternSendMut

Return the underlying mutable raw pointer Read more
Source§

impl Debug for GComputation

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Drop for GComputation

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl GComputationTrait for GComputation

Source§

fn as_raw_mut_GComputation(&mut self) -> *mut c_void

Source§

fn apply( &mut self, callback: &impl Detail_ExtractArgsCallbackTraitConst, args: GCompileArgs, ) -> Result<GRunArgs>

@private – Exclude this function from OpenCV documentation Read more
Source§

fn apply_def( &mut self, callback: &impl Detail_ExtractArgsCallbackTraitConst, ) -> Result<GRunArgs>

@private – Exclude this function from OpenCV documentation Read more
Source§

fn apply_1( &mut self, ins: &Vector<Mat>, outs: &Vector<Mat>, args: GCompileArgs, ) -> Result<()>

@private – Exclude this function from OpenCV documentation Read more
Source§

fn apply_def_1(&mut self, ins: &Vector<Mat>, outs: &Vector<Mat>) -> Result<()>

@private – Exclude this function from OpenCV documentation Read more
Source§

fn apply_2( &mut self, in_: impl MatTrait, out: &mut impl MatTrait, args: GCompileArgs, ) -> Result<()>

Execute an unary computation (with compilation on the fly) Read more
Source§

fn apply_def_2( &mut self, in_: impl MatTrait, out: &mut impl MatTrait, ) -> Result<()>

Execute an unary computation (with compilation on the fly) Read more
Source§

fn apply_3( &mut self, in_: impl MatTrait, out: &mut Scalar, args: GCompileArgs, ) -> Result<()>

Execute an unary computation (with compilation on the fly) Read more
Source§

fn apply_def_3(&mut self, in_: impl MatTrait, out: &mut Scalar) -> Result<()>

Execute an unary computation (with compilation on the fly) Read more
Source§

fn apply_4( &mut self, in1: impl MatTrait, in2: impl MatTrait, out: &mut impl MatTrait, args: GCompileArgs, ) -> Result<()>

Execute a binary computation (with compilation on the fly) Read more
Source§

fn apply_def_4( &mut self, in1: impl MatTrait, in2: impl MatTrait, out: &mut impl MatTrait, ) -> Result<()>

Execute a binary computation (with compilation on the fly) Read more
Source§

fn apply_5( &mut self, in1: impl MatTrait, in2: impl MatTrait, out: &mut Scalar, args: GCompileArgs, ) -> Result<()>

Execute an binary computation (with compilation on the fly) Read more
Source§

fn apply_def_5( &mut self, in1: impl MatTrait, in2: impl MatTrait, out: &mut Scalar, ) -> Result<()>

Execute an binary computation (with compilation on the fly) Read more
Source§

fn apply_6( &mut self, ins: &Vector<Mat>, outs: &mut Vector<Mat>, args: GCompileArgs, ) -> Result<()>

Execute a computation with arbitrary number of inputs/outputs (with compilation on-the-fly). Read more
Source§

fn apply_def_6( &mut self, ins: &Vector<Mat>, outs: &mut Vector<Mat>, ) -> Result<()>

Execute a computation with arbitrary number of inputs/outputs (with compilation on-the-fly). Read more
Source§

fn compile_streaming( &mut self, args: GCompileArgs, ) -> Result<GStreamingCompiled>

Compile the computation for streaming mode. Read more
Source§

fn compile_streaming_def(&mut self) -> Result<GStreamingCompiled>

Compile the computation for streaming mode. Read more
Source§

fn compile_streaming_1( &mut self, callback: &impl Detail_ExtractMetaCallbackTraitConst, args: GCompileArgs, ) -> Result<GStreamingCompiled>

@private – Exclude this function from OpenCV documentation Read more
Source§

fn compile_streaming_def_1( &mut self, callback: &impl Detail_ExtractMetaCallbackTraitConst, ) -> Result<GStreamingCompiled>

@private – Exclude this function from OpenCV documentation Read more
Source§

impl GComputationTraitConst for GComputation

Source§

impl Send for GComputation

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<Mat> ModifyInplace for Mat
where Mat: Boxed,

Source§

unsafe fn modify_inplace<Res>( &mut self, f: impl FnOnce(&Mat, &mut Mat) -> Res, ) -> Res

Helper function to call OpenCV functions that allow in-place modification of a Mat or another similar object. By passing a mutable reference to the Mat to this function your closure will get called with the read reference and a write references to the same Mat. This is unsafe in a general case as it leads to having non-exclusive mutable access to the internal data, but it can be useful for some performance sensitive operations. One example of an OpenCV function that allows such in-place modification is imgproc::threshold. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.