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 DECODE_3D_UNDERWORLD: i32 = 0;
pub const FAPS: i32 = 2;
pub const FTP: i32 = 0;
pub const PSP: i32 = 1;
pub trait GrayCodePattern: crate::structured_light::StructuredLightPattern {
#[inline(always)] fn as_raw_GrayCodePattern(&self) -> *mut c_void;
fn get_number_of_pattern_images(&self) -> Result<size_t> {
unsafe { sys::cv_structured_light_GrayCodePattern_getNumberOfPatternImages_const(self.as_raw_GrayCodePattern()) }.into_result()
}
fn set_white_threshold(&mut self, value: size_t) -> Result<()> {
unsafe { sys::cv_structured_light_GrayCodePattern_setWhiteThreshold_size_t(self.as_raw_GrayCodePattern(), value) }.into_result()
}
fn set_black_threshold(&mut self, value: size_t) -> Result<()> {
unsafe { sys::cv_structured_light_GrayCodePattern_setBlackThreshold_size_t(self.as_raw_GrayCodePattern(), value) }.into_result()
}
fn get_images_for_shadow_masks(&self, black_image: &mut dyn core::ToInputOutputArray, white_image: &mut dyn core::ToInputOutputArray) -> Result<()> {
input_output_array_arg!(black_image);
input_output_array_arg!(white_image);
unsafe { sys::cv_structured_light_GrayCodePattern_getImagesForShadowMasks_const__InputOutputArray__InputOutputArray(self.as_raw_GrayCodePattern(), black_image.as_raw__InputOutputArray(), white_image.as_raw__InputOutputArray()) }.into_result()
}
fn get_proj_pixel(&self, pattern_images: &dyn core::ToInputArray, x: i32, y: i32, proj_pix: &mut core::Point) -> Result<bool> {
input_array_arg!(pattern_images);
unsafe { sys::cv_structured_light_GrayCodePattern_getProjPixel_const__InputArray_int_int_Point(self.as_raw_GrayCodePattern(), pattern_images.as_raw__InputArray(), x, y, proj_pix) }.into_result()
}
}
impl dyn GrayCodePattern + '_ {
pub fn create(parameters: &crate::structured_light::GrayCodePattern_Params) -> Result<types::PtrOfGrayCodePattern> {
unsafe { sys::cv_structured_light_GrayCodePattern_create_Params(parameters.as_raw_GrayCodePattern_Params()) }.into_result().map(|ptr| types::PtrOfGrayCodePattern { ptr })
}
pub fn create_1(width: i32, height: i32) -> Result<types::PtrOfGrayCodePattern> {
unsafe { sys::cv_structured_light_GrayCodePattern_create_int_int(width, height) }.into_result().map(|ptr| types::PtrOfGrayCodePattern { ptr })
}
}
pub struct GrayCodePattern_Params {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::structured_light::GrayCodePattern_Params {
fn drop(&mut self) {
unsafe { sys::cv_GrayCodePattern_Params_delete(self.ptr) };
}
}
impl crate::structured_light::GrayCodePattern_Params {
#[inline(always)] pub fn as_raw_GrayCodePattern_Params(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for GrayCodePattern_Params {}
impl GrayCodePattern_Params {
pub fn default() -> Result<crate::structured_light::GrayCodePattern_Params> {
unsafe { sys::cv_structured_light_GrayCodePattern_Params_Params() }.into_result().map(|ptr| crate::structured_light::GrayCodePattern_Params { ptr })
}
}
pub trait SinusoidalPattern: crate::structured_light::StructuredLightPattern {
#[inline(always)] fn as_raw_SinusoidalPattern(&self) -> *mut c_void;
fn compute_phase_map(&mut self, pattern_images: &dyn core::ToInputArray, wrapped_phase_map: &mut dyn core::ToOutputArray, shadow_mask: &mut dyn core::ToOutputArray, fundamental: &dyn core::ToInputArray) -> Result<()> {
input_array_arg!(pattern_images);
output_array_arg!(wrapped_phase_map);
output_array_arg!(shadow_mask);
input_array_arg!(fundamental);
unsafe { sys::cv_structured_light_SinusoidalPattern_computePhaseMap__InputArray__OutputArray__OutputArray__InputArray(self.as_raw_SinusoidalPattern(), pattern_images.as_raw__InputArray(), wrapped_phase_map.as_raw__OutputArray(), shadow_mask.as_raw__OutputArray(), fundamental.as_raw__InputArray()) }.into_result()
}
fn unwrap_phase_map(&mut self, wrapped_phase_map: &dyn core::ToInputArray, unwrapped_phase_map: &mut dyn core::ToOutputArray, cam_size: core::Size, shadow_mask: &dyn core::ToInputArray) -> Result<()> {
input_array_arg!(wrapped_phase_map);
output_array_arg!(unwrapped_phase_map);
input_array_arg!(shadow_mask);
unsafe { sys::cv_structured_light_SinusoidalPattern_unwrapPhaseMap__InputArray__OutputArray_Size__InputArray(self.as_raw_SinusoidalPattern(), wrapped_phase_map.as_raw__InputArray(), unwrapped_phase_map.as_raw__OutputArray(), cam_size, shadow_mask.as_raw__InputArray()) }.into_result()
}
fn find_pro_cam_matches(&mut self, proj_unwrapped_phase_map: &dyn core::ToInputArray, cam_unwrapped_phase_map: &dyn core::ToInputArray, matches: &mut dyn core::ToOutputArray) -> Result<()> {
input_array_arg!(proj_unwrapped_phase_map);
input_array_arg!(cam_unwrapped_phase_map);
output_array_arg!(matches);
unsafe { sys::cv_structured_light_SinusoidalPattern_findProCamMatches__InputArray__InputArray__OutputArray(self.as_raw_SinusoidalPattern(), proj_unwrapped_phase_map.as_raw__InputArray(), cam_unwrapped_phase_map.as_raw__InputArray(), matches.as_raw__OutputArray()) }.into_result()
}
fn compute_data_modulation_term(&mut self, pattern_images: &dyn core::ToInputArray, data_modulation_term: &mut dyn core::ToOutputArray, shadow_mask: &dyn core::ToInputArray) -> Result<()> {
input_array_arg!(pattern_images);
output_array_arg!(data_modulation_term);
input_array_arg!(shadow_mask);
unsafe { sys::cv_structured_light_SinusoidalPattern_computeDataModulationTerm__InputArray__OutputArray__InputArray(self.as_raw_SinusoidalPattern(), pattern_images.as_raw__InputArray(), data_modulation_term.as_raw__OutputArray(), shadow_mask.as_raw__InputArray()) }.into_result()
}
}
impl dyn SinusoidalPattern + '_ {
pub fn create(parameters: &types::PtrOfParams) -> Result<types::PtrOfSinusoidalPattern> {
unsafe { sys::cv_structured_light_SinusoidalPattern_create_PtrOfParams(parameters.as_raw_PtrOfParams()) }.into_result().map(|ptr| types::PtrOfSinusoidalPattern { ptr })
}
}
pub struct SinusoidalPattern_Params {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::structured_light::SinusoidalPattern_Params {
fn drop(&mut self) {
unsafe { sys::cv_SinusoidalPattern_Params_delete(self.ptr) };
}
}
impl crate::structured_light::SinusoidalPattern_Params {
#[inline(always)] pub fn as_raw_SinusoidalPattern_Params(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for SinusoidalPattern_Params {}
impl SinusoidalPattern_Params {
pub fn width(&self) -> Result<i32> {
unsafe { sys::cv_structured_light_SinusoidalPattern_Params_width_const(self.as_raw_SinusoidalPattern_Params()) }.into_result()
}
pub fn height(&self) -> Result<i32> {
unsafe { sys::cv_structured_light_SinusoidalPattern_Params_height_const(self.as_raw_SinusoidalPattern_Params()) }.into_result()
}
pub fn nbr_of_periods(&self) -> Result<i32> {
unsafe { sys::cv_structured_light_SinusoidalPattern_Params_nbrOfPeriods_const(self.as_raw_SinusoidalPattern_Params()) }.into_result()
}
pub fn shift_value(&self) -> Result<f32> {
unsafe { sys::cv_structured_light_SinusoidalPattern_Params_shiftValue_const(self.as_raw_SinusoidalPattern_Params()) }.into_result()
}
pub fn method_id(&self) -> Result<i32> {
unsafe { sys::cv_structured_light_SinusoidalPattern_Params_methodId_const(self.as_raw_SinusoidalPattern_Params()) }.into_result()
}
pub fn nbr_of_pixels_between_markers(&self) -> Result<i32> {
unsafe { sys::cv_structured_light_SinusoidalPattern_Params_nbrOfPixelsBetweenMarkers_const(self.as_raw_SinusoidalPattern_Params()) }.into_result()
}
pub fn horizontal(&self) -> Result<bool> {
unsafe { sys::cv_structured_light_SinusoidalPattern_Params_horizontal_const(self.as_raw_SinusoidalPattern_Params()) }.into_result()
}
pub fn set_markers(&self) -> Result<bool> {
unsafe { sys::cv_structured_light_SinusoidalPattern_Params_setMarkers_const(self.as_raw_SinusoidalPattern_Params()) }.into_result()
}
pub fn default() -> Result<crate::structured_light::SinusoidalPattern_Params> {
unsafe { sys::cv_structured_light_SinusoidalPattern_Params_Params() }.into_result().map(|ptr| crate::structured_light::SinusoidalPattern_Params { ptr })
}
}
pub trait StructuredLightPattern: core::Algorithm {
#[inline(always)] fn as_raw_StructuredLightPattern(&self) -> *mut c_void;
fn generate(&mut self, pattern_images: &mut dyn core::ToOutputArray) -> Result<bool> {
output_array_arg!(pattern_images);
unsafe { sys::cv_structured_light_StructuredLightPattern_generate__OutputArray(self.as_raw_StructuredLightPattern(), pattern_images.as_raw__OutputArray()) }.into_result()
}
fn decode(&self, pattern_images: &types::VectorOfVectorOfMat, disparity_map: &mut dyn core::ToOutputArray, black_images: &dyn core::ToInputArray, white_images: &dyn core::ToInputArray, flags: i32) -> Result<bool> {
output_array_arg!(disparity_map);
input_array_arg!(black_images);
input_array_arg!(white_images);
unsafe { sys::cv_structured_light_StructuredLightPattern_decode_const_VectorOfVectorOfMat__OutputArray__InputArray__InputArray_int(self.as_raw_StructuredLightPattern(), pattern_images.as_raw_VectorOfVectorOfMat(), disparity_map.as_raw__OutputArray(), black_images.as_raw__InputArray(), white_images.as_raw__InputArray(), flags) }.into_result()
}
}