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 Stitcher_ERR_CAMERA_PARAMS_ADJUST_FAIL: i32 = 3;
pub const Stitcher_ERR_HOMOGRAPHY_EST_FAIL: i32 = 2;
pub const Stitcher_ERR_NEED_MORE_IMGS: i32 = 1;
pub const Stitcher_OK: i32 = 0;
pub const Stitcher_ORIG_RESOL: i32 = -1;
pub const Stitcher_PANORAMA: i32 = 0;
pub const Stitcher_SCANS: i32 = 1;
#[repr(C)]
#[derive(Debug)]
pub enum Stitcher_Mode {
PANORAMA = Stitcher_PANORAMA as isize,
SCANS = Stitcher_SCANS as isize,
}
#[repr(C)]
#[derive(Debug)]
pub enum Stitcher_Status {
OK = Stitcher_OK as isize,
ERR_NEED_MORE_IMGS = Stitcher_ERR_NEED_MORE_IMGS as isize,
ERR_HOMOGRAPHY_EST_FAIL = Stitcher_ERR_HOMOGRAPHY_EST_FAIL as isize,
ERR_CAMERA_PARAMS_ADJUST_FAIL = Stitcher_ERR_CAMERA_PARAMS_ADJUST_FAIL as isize,
}
pub fn create_stitcher(try_use_gpu: bool) -> Result<types::PtrOfStitcher> {
unsafe { sys::cv_createStitcher_bool(try_use_gpu) }.into_result().map(|ptr| types::PtrOfStitcher { ptr })
}
pub struct AffineWarper {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::stitching::AffineWarper {
fn drop(&mut self) {
unsafe { sys::cv_AffineWarper_delete(self.ptr) };
}
}
impl crate::stitching::AffineWarper {
#[inline(always)] pub fn as_raw_AffineWarper(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for AffineWarper {}
impl crate::stitching::WarperCreator for AffineWarper {
#[inline(always)] fn as_raw_WarperCreator(&self) -> *mut c_void { self.ptr }
}
impl AffineWarper {
}
pub struct CompressedRectilinearPortraitWarper {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::stitching::CompressedRectilinearPortraitWarper {
fn drop(&mut self) {
unsafe { sys::cv_CompressedRectilinearPortraitWarper_delete(self.ptr) };
}
}
impl crate::stitching::CompressedRectilinearPortraitWarper {
#[inline(always)] pub fn as_raw_CompressedRectilinearPortraitWarper(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for CompressedRectilinearPortraitWarper {}
impl crate::stitching::WarperCreator for CompressedRectilinearPortraitWarper {
#[inline(always)] fn as_raw_WarperCreator(&self) -> *mut c_void { self.ptr }
}
impl CompressedRectilinearPortraitWarper {
pub fn new(a: f32, b: f32) -> Result<crate::stitching::CompressedRectilinearPortraitWarper> {
unsafe { sys::cv_CompressedRectilinearPortraitWarper_CompressedRectilinearPortraitWarper_float_float(a, b) }.into_result().map(|ptr| crate::stitching::CompressedRectilinearPortraitWarper { ptr })
}
}
pub struct CompressedRectilinearWarper {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::stitching::CompressedRectilinearWarper {
fn drop(&mut self) {
unsafe { sys::cv_CompressedRectilinearWarper_delete(self.ptr) };
}
}
impl crate::stitching::CompressedRectilinearWarper {
#[inline(always)] pub fn as_raw_CompressedRectilinearWarper(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for CompressedRectilinearWarper {}
impl crate::stitching::WarperCreator for CompressedRectilinearWarper {
#[inline(always)] fn as_raw_WarperCreator(&self) -> *mut c_void { self.ptr }
}
impl CompressedRectilinearWarper {
pub fn new(a: f32, b: f32) -> Result<crate::stitching::CompressedRectilinearWarper> {
unsafe { sys::cv_CompressedRectilinearWarper_CompressedRectilinearWarper_float_float(a, b) }.into_result().map(|ptr| crate::stitching::CompressedRectilinearWarper { ptr })
}
}
pub struct CylindricalWarper {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::stitching::CylindricalWarper {
fn drop(&mut self) {
unsafe { sys::cv_CylindricalWarper_delete(self.ptr) };
}
}
impl crate::stitching::CylindricalWarper {
#[inline(always)] pub fn as_raw_CylindricalWarper(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for CylindricalWarper {}
impl crate::stitching::WarperCreator for CylindricalWarper {
#[inline(always)] fn as_raw_WarperCreator(&self) -> *mut c_void { self.ptr }
}
impl CylindricalWarper {
}
pub struct FisheyeWarper {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::stitching::FisheyeWarper {
fn drop(&mut self) {
unsafe { sys::cv_FisheyeWarper_delete(self.ptr) };
}
}
impl crate::stitching::FisheyeWarper {
#[inline(always)] pub fn as_raw_FisheyeWarper(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for FisheyeWarper {}
impl crate::stitching::WarperCreator for FisheyeWarper {
#[inline(always)] fn as_raw_WarperCreator(&self) -> *mut c_void { self.ptr }
}
impl FisheyeWarper {
}
pub struct MercatorWarper {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::stitching::MercatorWarper {
fn drop(&mut self) {
unsafe { sys::cv_MercatorWarper_delete(self.ptr) };
}
}
impl crate::stitching::MercatorWarper {
#[inline(always)] pub fn as_raw_MercatorWarper(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for MercatorWarper {}
impl crate::stitching::WarperCreator for MercatorWarper {
#[inline(always)] fn as_raw_WarperCreator(&self) -> *mut c_void { self.ptr }
}
impl MercatorWarper {
}
pub struct PaniniPortraitWarper {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::stitching::PaniniPortraitWarper {
fn drop(&mut self) {
unsafe { sys::cv_PaniniPortraitWarper_delete(self.ptr) };
}
}
impl crate::stitching::PaniniPortraitWarper {
#[inline(always)] pub fn as_raw_PaniniPortraitWarper(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for PaniniPortraitWarper {}
impl crate::stitching::WarperCreator for PaniniPortraitWarper {
#[inline(always)] fn as_raw_WarperCreator(&self) -> *mut c_void { self.ptr }
}
impl PaniniPortraitWarper {
pub fn new(a: f32, b: f32) -> Result<crate::stitching::PaniniPortraitWarper> {
unsafe { sys::cv_PaniniPortraitWarper_PaniniPortraitWarper_float_float(a, b) }.into_result().map(|ptr| crate::stitching::PaniniPortraitWarper { ptr })
}
}
pub struct PaniniWarper {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::stitching::PaniniWarper {
fn drop(&mut self) {
unsafe { sys::cv_PaniniWarper_delete(self.ptr) };
}
}
impl crate::stitching::PaniniWarper {
#[inline(always)] pub fn as_raw_PaniniWarper(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for PaniniWarper {}
impl crate::stitching::WarperCreator for PaniniWarper {
#[inline(always)] fn as_raw_WarperCreator(&self) -> *mut c_void { self.ptr }
}
impl PaniniWarper {
pub fn new(a: f32, b: f32) -> Result<crate::stitching::PaniniWarper> {
unsafe { sys::cv_PaniniWarper_PaniniWarper_float_float(a, b) }.into_result().map(|ptr| crate::stitching::PaniniWarper { ptr })
}
}
pub struct PlaneWarper {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::stitching::PlaneWarper {
fn drop(&mut self) {
unsafe { sys::cv_PlaneWarper_delete(self.ptr) };
}
}
impl crate::stitching::PlaneWarper {
#[inline(always)] pub fn as_raw_PlaneWarper(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for PlaneWarper {}
impl crate::stitching::WarperCreator for PlaneWarper {
#[inline(always)] fn as_raw_WarperCreator(&self) -> *mut c_void { self.ptr }
}
impl PlaneWarper {
}
pub struct SphericalWarper {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::stitching::SphericalWarper {
fn drop(&mut self) {
unsafe { sys::cv_SphericalWarper_delete(self.ptr) };
}
}
impl crate::stitching::SphericalWarper {
#[inline(always)] pub fn as_raw_SphericalWarper(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for SphericalWarper {}
impl crate::stitching::WarperCreator for SphericalWarper {
#[inline(always)] fn as_raw_WarperCreator(&self) -> *mut c_void { self.ptr }
}
impl SphericalWarper {
}
pub struct StereographicWarper {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::stitching::StereographicWarper {
fn drop(&mut self) {
unsafe { sys::cv_StereographicWarper_delete(self.ptr) };
}
}
impl crate::stitching::StereographicWarper {
#[inline(always)] pub fn as_raw_StereographicWarper(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for StereographicWarper {}
impl crate::stitching::WarperCreator for StereographicWarper {
#[inline(always)] fn as_raw_WarperCreator(&self) -> *mut c_void { self.ptr }
}
impl StereographicWarper {
}
pub struct Stitcher {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::stitching::Stitcher {
fn drop(&mut self) {
unsafe { sys::cv_Stitcher_delete(self.ptr) };
}
}
impl crate::stitching::Stitcher {
#[inline(always)] pub fn as_raw_Stitcher(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for Stitcher {}
impl Stitcher {
pub fn create_default(try_use_gpu: bool) -> Result<crate::stitching::Stitcher> {
unsafe { sys::cv_Stitcher_createDefault_bool(try_use_gpu) }.into_result().map(|ptr| crate::stitching::Stitcher { ptr })
}
pub fn create(mode: crate::stitching::Stitcher_Mode, try_use_gpu: bool) -> Result<types::PtrOfStitcher> {
unsafe { sys::cv_Stitcher_create_Stitcher_Mode_bool(mode, try_use_gpu) }.into_result().map(|ptr| types::PtrOfStitcher { ptr })
}
pub fn registration_resol(&self) -> Result<f64> {
unsafe { sys::cv_Stitcher_registrationResol_const(self.as_raw_Stitcher()) }.into_result()
}
pub fn set_registration_resol(&mut self, resol_mpx: f64) -> Result<()> {
unsafe { sys::cv_Stitcher_setRegistrationResol_double(self.as_raw_Stitcher(), resol_mpx) }.into_result()
}
pub fn seam_estimation_resol(&self) -> Result<f64> {
unsafe { sys::cv_Stitcher_seamEstimationResol_const(self.as_raw_Stitcher()) }.into_result()
}
pub fn set_seam_estimation_resol(&mut self, resol_mpx: f64) -> Result<()> {
unsafe { sys::cv_Stitcher_setSeamEstimationResol_double(self.as_raw_Stitcher(), resol_mpx) }.into_result()
}
pub fn compositing_resol(&self) -> Result<f64> {
unsafe { sys::cv_Stitcher_compositingResol_const(self.as_raw_Stitcher()) }.into_result()
}
pub fn set_compositing_resol(&mut self, resol_mpx: f64) -> Result<()> {
unsafe { sys::cv_Stitcher_setCompositingResol_double(self.as_raw_Stitcher(), resol_mpx) }.into_result()
}
pub fn pano_confidence_thresh(&self) -> Result<f64> {
unsafe { sys::cv_Stitcher_panoConfidenceThresh_const(self.as_raw_Stitcher()) }.into_result()
}
pub fn set_pano_confidence_thresh(&mut self, conf_thresh: f64) -> Result<()> {
unsafe { sys::cv_Stitcher_setPanoConfidenceThresh_double(self.as_raw_Stitcher(), conf_thresh) }.into_result()
}
pub fn wave_correction(&self) -> Result<bool> {
unsafe { sys::cv_Stitcher_waveCorrection_const(self.as_raw_Stitcher()) }.into_result()
}
pub fn set_wave_correction(&mut self, flag: bool) -> Result<()> {
unsafe { sys::cv_Stitcher_setWaveCorrection_bool(self.as_raw_Stitcher(), flag) }.into_result()
}
pub fn matching_mask(&self) -> Result<core::UMat> {
unsafe { sys::cv_Stitcher_matchingMask_const(self.as_raw_Stitcher()) }.into_result().map(|ptr| core::UMat { ptr })
}
pub fn set_matching_mask(&mut self, mask: &core::UMat) -> Result<()> {
unsafe { sys::cv_Stitcher_setMatchingMask_UMat(self.as_raw_Stitcher(), mask.as_raw_UMat()) }.into_result()
}
pub fn estimate_transform(&mut self, images: &dyn core::ToInputArray) -> Result<crate::stitching::Stitcher_Status> {
input_array_arg!(images);
unsafe { sys::cv_Stitcher_estimateTransform__InputArray(self.as_raw_Stitcher(), images.as_raw__InputArray()) }.into_result()
}
pub fn estimate_transform_1(&mut self, images: &dyn core::ToInputArray, rois: &types::VectorOfVectorOfRect) -> Result<crate::stitching::Stitcher_Status> {
input_array_arg!(images);
unsafe { sys::cv_Stitcher_estimateTransform__InputArray_VectorOfVectorOfRect(self.as_raw_Stitcher(), images.as_raw__InputArray(), rois.as_raw_VectorOfVectorOfRect()) }.into_result()
}
pub fn compose_panorama(&mut self, pano: &mut dyn core::ToOutputArray) -> Result<crate::stitching::Stitcher_Status> {
output_array_arg!(pano);
unsafe { sys::cv_Stitcher_composePanorama__OutputArray(self.as_raw_Stitcher(), pano.as_raw__OutputArray()) }.into_result()
}
pub fn compose_panorama_images(&mut self, images: &dyn core::ToInputArray, pano: &mut dyn core::ToOutputArray) -> Result<crate::stitching::Stitcher_Status> {
input_array_arg!(images);
output_array_arg!(pano);
unsafe { sys::cv_Stitcher_composePanorama__InputArray__OutputArray(self.as_raw_Stitcher(), images.as_raw__InputArray(), pano.as_raw__OutputArray()) }.into_result()
}
pub fn stitch(&mut self, images: &dyn core::ToInputArray, pano: &mut dyn core::ToOutputArray) -> Result<crate::stitching::Stitcher_Status> {
input_array_arg!(images);
output_array_arg!(pano);
unsafe { sys::cv_Stitcher_stitch__InputArray__OutputArray(self.as_raw_Stitcher(), images.as_raw__InputArray(), pano.as_raw__OutputArray()) }.into_result()
}
pub fn stitch_rois(&mut self, images: &dyn core::ToInputArray, rois: &types::VectorOfVectorOfRect, pano: &mut dyn core::ToOutputArray) -> Result<crate::stitching::Stitcher_Status> {
input_array_arg!(images);
output_array_arg!(pano);
unsafe { sys::cv_Stitcher_stitch__InputArray_VectorOfVectorOfRect__OutputArray(self.as_raw_Stitcher(), images.as_raw__InputArray(), rois.as_raw_VectorOfVectorOfRect(), pano.as_raw__OutputArray()) }.into_result()
}
pub fn component(&self) -> Result<types::VectorOfint> {
unsafe { sys::cv_Stitcher_component_const(self.as_raw_Stitcher()) }.into_result().map(|ptr| types::VectorOfint { ptr })
}
pub fn work_scale(&self) -> Result<f64> {
unsafe { sys::cv_Stitcher_workScale_const(self.as_raw_Stitcher()) }.into_result()
}
}
pub struct TransverseMercatorWarper {
#[doc(hidden)] pub(crate) ptr: *mut c_void
}
impl Drop for crate::stitching::TransverseMercatorWarper {
fn drop(&mut self) {
unsafe { sys::cv_TransverseMercatorWarper_delete(self.ptr) };
}
}
impl crate::stitching::TransverseMercatorWarper {
#[inline(always)] pub fn as_raw_TransverseMercatorWarper(&self) -> *mut c_void { self.ptr }
pub unsafe fn from_raw_ptr(ptr: *mut c_void) -> Self {
Self { ptr }
}
}
unsafe impl Send for TransverseMercatorWarper {}
impl crate::stitching::WarperCreator for TransverseMercatorWarper {
#[inline(always)] fn as_raw_WarperCreator(&self) -> *mut c_void { self.ptr }
}
impl TransverseMercatorWarper {
}
pub trait WarperCreator {
#[inline(always)] fn as_raw_WarperCreator(&self) -> *mut c_void;
}