#![allow(
unused_parens,
clippy::excessive_precision,
clippy::missing_safety_doc,
clippy::should_implement_trait,
clippy::too_many_arguments,
clippy::unused_unit,
clippy::let_unit_value,
clippy::derive_partial_eq_without_eq,
)]
//! # Alpha Matting
//! Alpha matting is used to extract a foreground object with soft boundaries from a background image.
//!
//! This module is dedicated to computing alpha matte of objects in images from a given input image and a greyscale trimap image that contains information about the foreground, background and unknown pixels. The unknown pixels are assumed to be a combination of foreground and background pixels. The algorithm uses a combination of multiple carefully defined pixels affinities to estimate the opacity of the foreground pixels in the unkown region.
//!
//! The implementation is based on [aksoy2017designing](https://docs.opencv.org/4.7.0/d0/de3/citelist.html#CITEREF_aksoy2017designing).
//!
//! This module was developed by Muskaan Kularia and Sunita Nayak as a project
//! for Google Summer of Code 2019 (GSoC 19).
use crate::{mod_prelude::*, core, sys, types};
pub mod prelude {
pub use { };
}
/// Compute alpha matte of an object in an image
/// ## Parameters
/// * image: Input RGB image
/// * tmap: Input greyscale trimap image
/// * result: Output alpha matte image
///
/// The function infoFlow performs alpha matting on a RGB image using a greyscale trimap image, and outputs a greyscale alpha matte image. The output alpha matte can be used to softly extract the foreground object from a background image. Examples can be found in the samples directory.
#[inline]
pub fn info_flow(image: &dyn core::ToInputArray, tmap: &dyn core::ToInputArray, result: &mut dyn core::ToOutputArray) -> Result<()> {
extern_container_arg!(image);
extern_container_arg!(tmap);
extern_container_arg!(result);
return_send!(via ocvrs_return);
unsafe { sys::cv_alphamat_infoFlow_const__InputArrayR_const__InputArrayR_const__OutputArrayR(image.as_raw__InputArray(), tmap.as_raw__InputArray(), result.as_raw__OutputArray(), ocvrs_return.as_mut_ptr()) };
return_receive!(unsafe ocvrs_return => ret);
let ret = ret.into_result()?;
Ok(ret)
}