use std::os::raw::{c_char, c_void};
use libc::{ptrdiff_t, size_t};
use crate::{Error, Result, core, sys, types};
use crate::core::{_InputArray, _OutputArray};
pub const LSBP_CAMERA_MOTION_COMPENSATION_LK: i32 = 0+1;
pub const LSBP_CAMERA_MOTION_COMPENSATION_NONE: i32 = 0;
pub fn create_background_subtractor_cnt(min_pixel_stability: i32, use_history: bool, max_pixel_stability: i32, is_parallel: bool) -> Result<types::PtrOfBackgroundSubtractorCNT> {
unsafe { sys::cv_bgsegm_createBackgroundSubtractorCNT_int_bool_int_bool(min_pixel_stability, use_history, max_pixel_stability, is_parallel) }.into_result().map(|ptr| types::PtrOfBackgroundSubtractorCNT { ptr })
}
pub fn create_background_subtractor_gmg(initialization_frames: i32, decision_threshold: f64) -> Result<types::PtrOfBackgroundSubtractorGMG> {
unsafe { sys::cv_bgsegm_createBackgroundSubtractorGMG_int_double(initialization_frames, decision_threshold) }.into_result().map(|ptr| types::PtrOfBackgroundSubtractorGMG { ptr })
}
pub fn create_background_subtractor_gsoc(mc: i32, n_samples: i32, replace_rate: f32, propagation_rate: f32, hits_threshold: i32, alpha: f32, beta: f32, blinking_supression_decay: f32, blinking_supression_multiplier: f32, noise_removal_threshold_fac_bg: f32, noise_removal_threshold_fac_fg: f32) -> Result<types::PtrOfBackgroundSubtractorGSOC> {
unsafe { sys::cv_bgsegm_createBackgroundSubtractorGSOC_int_int_float_float_int_float_float_float_float_float_float(mc, n_samples, replace_rate, propagation_rate, hits_threshold, alpha, beta, blinking_supression_decay, blinking_supression_multiplier, noise_removal_threshold_fac_bg, noise_removal_threshold_fac_fg) }.into_result().map(|ptr| types::PtrOfBackgroundSubtractorGSOC { ptr })
}
pub fn create_background_subtractor_lsbp(mc: i32, n_samples: i32, lsbp_radius: i32, tlower: f32, tupper: f32, tinc: f32, tdec: f32, rscale: f32, rincdec: f32, noise_removal_threshold_fac_bg: f32, noise_removal_threshold_fac_fg: f32, lsb_pthreshold: i32, min_count: i32) -> Result<types::PtrOfBackgroundSubtractorLSBP> {
unsafe { sys::cv_bgsegm_createBackgroundSubtractorLSBP_int_int_int_float_float_float_float_float_float_float_float_int_int(mc, n_samples, lsbp_radius, tlower, tupper, tinc, tdec, rscale, rincdec, noise_removal_threshold_fac_bg, noise_removal_threshold_fac_fg, lsb_pthreshold, min_count) }.into_result().map(|ptr| types::PtrOfBackgroundSubtractorLSBP { ptr })
}
pub fn create_background_subtractor_mog(history: i32, nmixtures: i32, background_ratio: f64, noise_sigma: f64) -> Result<types::PtrOfBackgroundSubtractorMOG> {
unsafe { sys::cv_bgsegm_createBackgroundSubtractorMOG_int_int_double_double(history, nmixtures, background_ratio, noise_sigma) }.into_result().map(|ptr| types::PtrOfBackgroundSubtractorMOG { ptr })
}
pub fn create_synthetic_sequence_generator(background: &dyn core::ToInputArray, object: &dyn core::ToInputArray, amplitude: f64, wavelength: f64, wavespeed: f64, objspeed: f64) -> Result<types::PtrOfSyntheticSequenceGenerator> {
input_array_arg!(background);
input_array_arg!(object);
unsafe { sys::cv_bgsegm_createSyntheticSequenceGenerator__InputArray__InputArray_double_double_double_double(background.as_raw__InputArray(), object.as_raw__InputArray(), amplitude, wavelength, wavespeed, objspeed) }.into_result().map(|ptr| types::PtrOfSyntheticSequenceGenerator { ptr })
}
pub trait BackgroundSubtractorCNT {
#[inline(always)] fn as_raw_BackgroundSubtractorCNT(&self) -> *mut c_void;
fn apply(&mut self, image: &dyn core::ToInputArray, fgmask: &mut dyn core::ToOutputArray, learning_rate: f64) -> Result<()> {
input_array_arg!(image);
output_array_arg!(fgmask);
unsafe { sys::cv_bgsegm_BackgroundSubtractorCNT_apply__InputArray__OutputArray_double(self.as_raw_BackgroundSubtractorCNT(), image.as_raw__InputArray(), fgmask.as_raw__OutputArray(), learning_rate) }.into_result()
}
fn get_background_image(&self, background_image: &mut dyn core::ToOutputArray) -> Result<()> {
output_array_arg!(background_image);
unsafe { sys::cv_bgsegm_BackgroundSubtractorCNT_getBackgroundImage_const__OutputArray(self.as_raw_BackgroundSubtractorCNT(), background_image.as_raw__OutputArray()) }.into_result()
}
fn get_min_pixel_stability(&self) -> Result<i32> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorCNT_getMinPixelStability_const(self.as_raw_BackgroundSubtractorCNT()) }.into_result()
}
fn set_min_pixel_stability(&mut self, value: i32) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorCNT_setMinPixelStability_int(self.as_raw_BackgroundSubtractorCNT(), value) }.into_result()
}
fn get_max_pixel_stability(&self) -> Result<i32> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorCNT_getMaxPixelStability_const(self.as_raw_BackgroundSubtractorCNT()) }.into_result()
}
fn set_max_pixel_stability(&mut self, value: i32) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorCNT_setMaxPixelStability_int(self.as_raw_BackgroundSubtractorCNT(), value) }.into_result()
}
fn get_use_history(&self) -> Result<bool> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorCNT_getUseHistory_const(self.as_raw_BackgroundSubtractorCNT()) }.into_result()
}
fn set_use_history(&mut self, value: bool) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorCNT_setUseHistory_bool(self.as_raw_BackgroundSubtractorCNT(), value) }.into_result()
}
fn get_is_parallel(&self) -> Result<bool> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorCNT_getIsParallel_const(self.as_raw_BackgroundSubtractorCNT()) }.into_result()
}
fn set_is_parallel(&mut self, value: bool) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorCNT_setIsParallel_bool(self.as_raw_BackgroundSubtractorCNT(), value) }.into_result()
}
}
pub trait BackgroundSubtractorGMG {
#[inline(always)] fn as_raw_BackgroundSubtractorGMG(&self) -> *mut c_void;
fn get_max_features(&self) -> Result<i32> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_getMaxFeatures_const(self.as_raw_BackgroundSubtractorGMG()) }.into_result()
}
fn set_max_features(&mut self, max_features: i32) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_setMaxFeatures_int(self.as_raw_BackgroundSubtractorGMG(), max_features) }.into_result()
}
fn get_default_learning_rate(&self) -> Result<f64> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_getDefaultLearningRate_const(self.as_raw_BackgroundSubtractorGMG()) }.into_result()
}
fn set_default_learning_rate(&mut self, lr: f64) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_setDefaultLearningRate_double(self.as_raw_BackgroundSubtractorGMG(), lr) }.into_result()
}
fn get_num_frames(&self) -> Result<i32> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_getNumFrames_const(self.as_raw_BackgroundSubtractorGMG()) }.into_result()
}
fn set_num_frames(&mut self, nframes: i32) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_setNumFrames_int(self.as_raw_BackgroundSubtractorGMG(), nframes) }.into_result()
}
fn get_quantization_levels(&self) -> Result<i32> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_getQuantizationLevels_const(self.as_raw_BackgroundSubtractorGMG()) }.into_result()
}
fn set_quantization_levels(&mut self, nlevels: i32) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_setQuantizationLevels_int(self.as_raw_BackgroundSubtractorGMG(), nlevels) }.into_result()
}
fn get_background_prior(&self) -> Result<f64> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_getBackgroundPrior_const(self.as_raw_BackgroundSubtractorGMG()) }.into_result()
}
fn set_background_prior(&mut self, bgprior: f64) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_setBackgroundPrior_double(self.as_raw_BackgroundSubtractorGMG(), bgprior) }.into_result()
}
fn get_smoothing_radius(&self) -> Result<i32> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_getSmoothingRadius_const(self.as_raw_BackgroundSubtractorGMG()) }.into_result()
}
fn set_smoothing_radius(&mut self, radius: i32) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_setSmoothingRadius_int(self.as_raw_BackgroundSubtractorGMG(), radius) }.into_result()
}
fn get_decision_threshold(&self) -> Result<f64> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_getDecisionThreshold_const(self.as_raw_BackgroundSubtractorGMG()) }.into_result()
}
fn set_decision_threshold(&mut self, thresh: f64) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_setDecisionThreshold_double(self.as_raw_BackgroundSubtractorGMG(), thresh) }.into_result()
}
fn get_update_background_model(&self) -> Result<bool> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_getUpdateBackgroundModel_const(self.as_raw_BackgroundSubtractorGMG()) }.into_result()
}
fn set_update_background_model(&mut self, update: bool) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_setUpdateBackgroundModel_bool(self.as_raw_BackgroundSubtractorGMG(), update) }.into_result()
}
fn get_min_val(&self) -> Result<f64> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_getMinVal_const(self.as_raw_BackgroundSubtractorGMG()) }.into_result()
}
fn set_min_val(&mut self, val: f64) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_setMinVal_double(self.as_raw_BackgroundSubtractorGMG(), val) }.into_result()
}
fn get_max_val(&self) -> Result<f64> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_getMaxVal_const(self.as_raw_BackgroundSubtractorGMG()) }.into_result()
}
fn set_max_val(&mut self, val: f64) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorGMG_setMaxVal_double(self.as_raw_BackgroundSubtractorGMG(), val) }.into_result()
}
}
pub struct BackgroundSubtractorGSOC {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::bgsegm::BackgroundSubtractorGSOC {
fn drop(&mut self) {
unsafe { sys::cv_BackgroundSubtractorGSOC_delete(self.ptr) };
}
}
impl crate::bgsegm::BackgroundSubtractorGSOC {
#[inline(always)] pub fn as_raw_BackgroundSubtractorGSOC(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for BackgroundSubtractorGSOC {}
impl BackgroundSubtractorGSOC {
pub fn apply(&mut self, image: &dyn core::ToInputArray, fgmask: &mut dyn core::ToOutputArray, learning_rate: f64) -> Result<()> {
input_array_arg!(image);
output_array_arg!(fgmask);
unsafe { sys::cv_bgsegm_BackgroundSubtractorGSOC_apply__InputArray__OutputArray_double(self.as_raw_BackgroundSubtractorGSOC(), image.as_raw__InputArray(), fgmask.as_raw__OutputArray(), learning_rate) }.into_result()
}
pub fn get_background_image(&self, background_image: &mut dyn core::ToOutputArray) -> Result<()> {
output_array_arg!(background_image);
unsafe { sys::cv_bgsegm_BackgroundSubtractorGSOC_getBackgroundImage_const__OutputArray(self.as_raw_BackgroundSubtractorGSOC(), background_image.as_raw__OutputArray()) }.into_result()
}
}
pub struct BackgroundSubtractorLSBP {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::bgsegm::BackgroundSubtractorLSBP {
fn drop(&mut self) {
unsafe { sys::cv_BackgroundSubtractorLSBP_delete(self.ptr) };
}
}
impl crate::bgsegm::BackgroundSubtractorLSBP {
#[inline(always)] pub fn as_raw_BackgroundSubtractorLSBP(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for BackgroundSubtractorLSBP {}
impl BackgroundSubtractorLSBP {
pub fn apply(&mut self, image: &dyn core::ToInputArray, fgmask: &mut dyn core::ToOutputArray, learning_rate: f64) -> Result<()> {
input_array_arg!(image);
output_array_arg!(fgmask);
unsafe { sys::cv_bgsegm_BackgroundSubtractorLSBP_apply__InputArray__OutputArray_double(self.as_raw_BackgroundSubtractorLSBP(), image.as_raw__InputArray(), fgmask.as_raw__OutputArray(), learning_rate) }.into_result()
}
pub fn get_background_image(&self, background_image: &mut dyn core::ToOutputArray) -> Result<()> {
output_array_arg!(background_image);
unsafe { sys::cv_bgsegm_BackgroundSubtractorLSBP_getBackgroundImage_const__OutputArray(self.as_raw_BackgroundSubtractorLSBP(), background_image.as_raw__OutputArray()) }.into_result()
}
}
pub struct BackgroundSubtractorLSBPDesc {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::bgsegm::BackgroundSubtractorLSBPDesc {
fn drop(&mut self) {
unsafe { sys::cv_BackgroundSubtractorLSBPDesc_delete(self.ptr) };
}
}
impl crate::bgsegm::BackgroundSubtractorLSBPDesc {
#[inline(always)] pub fn as_raw_BackgroundSubtractorLSBPDesc(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for BackgroundSubtractorLSBPDesc {}
impl BackgroundSubtractorLSBPDesc {
pub fn calc_local_svd_values(local_svd_values: &mut dyn core::ToOutputArray, frame: &core::Mat) -> Result<()> {
output_array_arg!(local_svd_values);
unsafe { sys::cv_bgsegm_BackgroundSubtractorLSBPDesc_calcLocalSVDValues__OutputArray_Mat(local_svd_values.as_raw__OutputArray(), frame.as_raw_Mat()) }.into_result()
}
pub fn compute_from_local_svd_values(desc: &mut dyn core::ToOutputArray, local_svd_values: &core::Mat, lsbp_sample_points: &core::Point2i) -> Result<()> {
output_array_arg!(desc);
unsafe { sys::cv_bgsegm_BackgroundSubtractorLSBPDesc_computeFromLocalSVDValues__OutputArray_Mat_const_Point2i_X(desc.as_raw__OutputArray(), local_svd_values.as_raw_Mat(), lsbp_sample_points) }.into_result()
}
pub fn compute(desc: &mut dyn core::ToOutputArray, frame: &core::Mat, lsbp_sample_points: &core::Point2i) -> Result<()> {
output_array_arg!(desc);
unsafe { sys::cv_bgsegm_BackgroundSubtractorLSBPDesc_compute__OutputArray_Mat_const_Point2i_X(desc.as_raw__OutputArray(), frame.as_raw_Mat(), lsbp_sample_points) }.into_result()
}
}
pub trait BackgroundSubtractorMOG {
#[inline(always)] fn as_raw_BackgroundSubtractorMOG(&self) -> *mut c_void;
fn get_history(&self) -> Result<i32> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorMOG_getHistory_const(self.as_raw_BackgroundSubtractorMOG()) }.into_result()
}
fn set_history(&mut self, nframes: i32) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorMOG_setHistory_int(self.as_raw_BackgroundSubtractorMOG(), nframes) }.into_result()
}
fn get_n_mixtures(&self) -> Result<i32> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorMOG_getNMixtures_const(self.as_raw_BackgroundSubtractorMOG()) }.into_result()
}
fn set_n_mixtures(&mut self, nmix: i32) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorMOG_setNMixtures_int(self.as_raw_BackgroundSubtractorMOG(), nmix) }.into_result()
}
fn get_background_ratio(&self) -> Result<f64> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorMOG_getBackgroundRatio_const(self.as_raw_BackgroundSubtractorMOG()) }.into_result()
}
fn set_background_ratio(&mut self, background_ratio: f64) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorMOG_setBackgroundRatio_double(self.as_raw_BackgroundSubtractorMOG(), background_ratio) }.into_result()
}
fn get_noise_sigma(&self) -> Result<f64> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorMOG_getNoiseSigma_const(self.as_raw_BackgroundSubtractorMOG()) }.into_result()
}
fn set_noise_sigma(&mut self, noise_sigma: f64) -> Result<()> {
unsafe { sys::cv_bgsegm_BackgroundSubtractorMOG_setNoiseSigma_double(self.as_raw_BackgroundSubtractorMOG(), noise_sigma) }.into_result()
}
}
pub struct SyntheticSequenceGenerator {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::bgsegm::SyntheticSequenceGenerator {
fn drop(&mut self) {
unsafe { sys::cv_SyntheticSequenceGenerator_delete(self.ptr) };
}
}
impl crate::bgsegm::SyntheticSequenceGenerator {
#[inline(always)] pub fn as_raw_SyntheticSequenceGenerator(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for SyntheticSequenceGenerator {}
impl core::Algorithm for SyntheticSequenceGenerator {
#[inline(always)] fn as_raw_Algorithm(&self) -> *mut c_void { self.ptr }
}
impl SyntheticSequenceGenerator {
pub fn new(background: &dyn core::ToInputArray, object: &dyn core::ToInputArray, amplitude: f64, wavelength: f64, wavespeed: f64, objspeed: f64) -> Result<crate::bgsegm::SyntheticSequenceGenerator> {
input_array_arg!(background);
input_array_arg!(object);
unsafe { sys::cv_bgsegm_SyntheticSequenceGenerator_SyntheticSequenceGenerator__InputArray__InputArray_double_double_double_double(background.as_raw__InputArray(), object.as_raw__InputArray(), amplitude, wavelength, wavespeed, objspeed) }.into_result().map(|ptr| crate::bgsegm::SyntheticSequenceGenerator { ptr })
}
pub fn get_next_frame(&mut self, frame: &mut dyn core::ToOutputArray, gt_mask: &mut dyn core::ToOutputArray) -> Result<()> {
output_array_arg!(frame);
output_array_arg!(gt_mask);
unsafe { sys::cv_bgsegm_SyntheticSequenceGenerator_getNextFrame__OutputArray__OutputArray(self.as_raw_SyntheticSequenceGenerator(), frame.as_raw__OutputArray(), gt_mask.as_raw__OutputArray()) }.into_result()
}
}