use std::os::raw::{c_char, c_void};
use libc::{ptrdiff_t, size_t};
use crate::{Error, Result, core, sys, types};
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 core::Mat, white_image: &mut core::Mat) -> Result<()> {
unsafe { sys::cv_structured_light_GrayCodePattern_getImagesForShadowMasks_const_Mat_Mat(self.as_raw_GrayCodePattern(), black_image.as_raw_Mat(), white_image.as_raw_Mat()) }.into_result()
}
fn get_proj_pixel(&self, pattern_images: &types::VectorOfMat, x: i32, y: i32, proj_pix: &mut core::Point) -> Result<bool> {
unsafe { sys::cv_structured_light_GrayCodePattern_getProjPixel_const_VectorOfMat_int_int_Point(self.as_raw_GrayCodePattern(), pattern_images.as_raw_VectorOfMat(), 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: &types::VectorOfMat, wrapped_phase_map: &mut core::Mat, shadow_mask: &mut core::Mat, fundamental: &core::Mat) -> Result<()> {
unsafe { sys::cv_structured_light_SinusoidalPattern_computePhaseMap_VectorOfMat_Mat_Mat_Mat(self.as_raw_SinusoidalPattern(), pattern_images.as_raw_VectorOfMat(), wrapped_phase_map.as_raw_Mat(), shadow_mask.as_raw_Mat(), fundamental.as_raw_Mat()) }.into_result()
}
fn unwrap_phase_map(&mut self, wrapped_phase_map: &types::VectorOfMat, unwrapped_phase_map: &mut core::Mat, cam_size: core::Size, shadow_mask: &core::Mat) -> Result<()> {
unsafe { sys::cv_structured_light_SinusoidalPattern_unwrapPhaseMap_VectorOfMat_Mat_Size_Mat(self.as_raw_SinusoidalPattern(), wrapped_phase_map.as_raw_VectorOfMat(), unwrapped_phase_map.as_raw_Mat(), cam_size, shadow_mask.as_raw_Mat()) }.into_result()
}
fn find_pro_cam_matches(&mut self, proj_unwrapped_phase_map: &core::Mat, cam_unwrapped_phase_map: &core::Mat, matches: &mut types::VectorOfMat) -> Result<()> {
unsafe { sys::cv_structured_light_SinusoidalPattern_findProCamMatches_Mat_Mat_VectorOfMat(self.as_raw_SinusoidalPattern(), proj_unwrapped_phase_map.as_raw_Mat(), cam_unwrapped_phase_map.as_raw_Mat(), matches.as_raw_VectorOfMat()) }.into_result()
}
fn compute_data_modulation_term(&mut self, pattern_images: &types::VectorOfMat, data_modulation_term: &mut core::Mat, shadow_mask: &core::Mat) -> Result<()> {
unsafe { sys::cv_structured_light_SinusoidalPattern_computeDataModulationTerm_VectorOfMat_Mat_Mat(self.as_raw_SinusoidalPattern(), pattern_images.as_raw_VectorOfMat(), data_modulation_term.as_raw_Mat(), shadow_mask.as_raw_Mat()) }.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 types::VectorOfMat) -> Result<bool> {
unsafe { sys::cv_structured_light_StructuredLightPattern_generate_VectorOfMat(self.as_raw_StructuredLightPattern(), pattern_images.as_raw_VectorOfMat()) }.into_result()
}
fn decode(&self, pattern_images: &types::VectorOfVectorOfMat, disparity_map: &mut core::Mat, black_images: &types::VectorOfMat, white_images: &types::VectorOfMat, flags: i32) -> Result<bool> {
unsafe { sys::cv_structured_light_StructuredLightPattern_decode_const_VectorOfVectorOfMat_Mat_VectorOfMat_VectorOfMat_int(self.as_raw_StructuredLightPattern(), pattern_images.as_raw_VectorOfVectorOfMat(), disparity_map.as_raw_Mat(), black_images.as_raw_VectorOfMat(), white_images.as_raw_VectorOfMat(), flags) }.into_result()
}
}