using OpenCVForUnity.CoreModule;
using OpenCVForUnity.UtilsModule;
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;

namespace OpenCVForUnity.XimgprocModule {

    // C++: class SelectiveSearchSegmentation
    //javadoc: SelectiveSearchSegmentation

    public class SelectiveSearchSegmentation : Algorithm {

        protected override void Dispose(bool disposing) {
#if (UNITY_ANDROID && !UNITY_EDITOR)
            try {
                if (disposing) {
                }
                if (IsEnabledDispose) {
                    if (nativeObj != IntPtr.Zero)
                        ximgproc_SelectiveSearchSegmentation_delete(nativeObj);
                    nativeObj = IntPtr.Zero;
                }
            } finally {
                base.Dispose(disposing);
            }
#else
            return;
#endif
        }

        protected internal SelectiveSearchSegmentation(IntPtr addr) : base(addr) { }

        // internal usage only
        public static new SelectiveSearchSegmentation __fromPtr__(IntPtr addr) { return new SelectiveSearchSegmentation(addr); }

        //
        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::addGraphSegmentation(Ptr_GraphSegmentation g)
        //

        //javadoc: SelectiveSearchSegmentation::addGraphSegmentation(g)
        public void addGraphSegmentation(GraphSegmentation g) {
            ThrowIfDisposed();
            if (g != null) g.ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_addGraphSegmentation_10(nativeObj, g.getNativeObjAddr());

            return;
#else
            return;
#endif
        }


        //
        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::addImage(Mat img)
        //

        //javadoc: SelectiveSearchSegmentation::addImage(img)
        public void addImage(Mat img) {
            ThrowIfDisposed();
            if (img != null) img.ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_addImage_10(nativeObj, img.nativeObj);

            return;
#else
            return;
#endif
        }


        //
        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::addStrategy(Ptr_SelectiveSearchSegmentationStrategy s)
        //

        //javadoc: SelectiveSearchSegmentation::addStrategy(s)
        public void addStrategy(SelectiveSearchSegmentationStrategy s) {
            ThrowIfDisposed();
            if (s != null) s.ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_addStrategy_10(nativeObj, s.getNativeObjAddr());

            return;
#else
            return;
#endif
        }


        //
        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::clearGraphSegmentations()
        //

        //javadoc: SelectiveSearchSegmentation::clearGraphSegmentations()
        public void clearGraphSegmentations() {
            ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_clearGraphSegmentations_10(nativeObj);

            return;
#else
            return;
#endif
        }


        //
        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::clearImages()
        //

        //javadoc: SelectiveSearchSegmentation::clearImages()
        public void clearImages() {
            ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_clearImages_10(nativeObj);

            return;
#else
            return;
#endif
        }


        //
        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::clearStrategies()
        //

        //javadoc: SelectiveSearchSegmentation::clearStrategies()
        public void clearStrategies() {
            ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_clearStrategies_10(nativeObj);

            return;
#else
            return;
#endif
        }


        //
        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::process(vector_Rect& rects)
        //

        //javadoc: SelectiveSearchSegmentation::process(rects)
        public void process(MatOfRect rects) {
            ThrowIfDisposed();
            if (rects != null) rects.ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)
            Mat rects_mat = rects;
            ximgproc_SelectiveSearchSegmentation_process_10(nativeObj, rects_mat.nativeObj);

            return;
#else
            return;
#endif
        }


        //
        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::setBaseImage(Mat img)
        //

        //javadoc: SelectiveSearchSegmentation::setBaseImage(img)
        public void setBaseImage(Mat img) {
            ThrowIfDisposed();
            if (img != null) img.ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_setBaseImage_10(nativeObj, img.nativeObj);

            return;
#else
            return;
#endif
        }


        //
        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::switchToSelectiveSearchFast(int base_k = 150, int inc_k = 150, float sigma = 0.8f)
        //

        //javadoc: SelectiveSearchSegmentation::switchToSelectiveSearchFast(base_k, inc_k, sigma)
        public void switchToSelectiveSearchFast(int base_k, int inc_k, float sigma) {
            ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchFast_10(nativeObj, base_k, inc_k, sigma);

            return;
#else
            return;
#endif
        }

        //javadoc: SelectiveSearchSegmentation::switchToSelectiveSearchFast(base_k, inc_k)
        public void switchToSelectiveSearchFast(int base_k, int inc_k) {
            ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchFast_11(nativeObj, base_k, inc_k);

            return;
#else
            return;
#endif
        }

        //javadoc: SelectiveSearchSegmentation::switchToSelectiveSearchFast(base_k)
        public void switchToSelectiveSearchFast(int base_k) {
            ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchFast_12(nativeObj, base_k);

            return;
#else
            return;
#endif
        }

        //javadoc: SelectiveSearchSegmentation::switchToSelectiveSearchFast()
        public void switchToSelectiveSearchFast() {
            ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchFast_13(nativeObj);

            return;
#else
            return;
#endif
        }


        //
        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::switchToSelectiveSearchQuality(int base_k = 150, int inc_k = 150, float sigma = 0.8f)
        //

        //javadoc: SelectiveSearchSegmentation::switchToSelectiveSearchQuality(base_k, inc_k, sigma)
        public void switchToSelectiveSearchQuality(int base_k, int inc_k, float sigma) {
            ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchQuality_10(nativeObj, base_k, inc_k, sigma);

            return;
#else
            return;
#endif
        }

        //javadoc: SelectiveSearchSegmentation::switchToSelectiveSearchQuality(base_k, inc_k)
        public void switchToSelectiveSearchQuality(int base_k, int inc_k) {
            ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchQuality_11(nativeObj, base_k, inc_k);

            return;
#else
            return;
#endif
        }

        //javadoc: SelectiveSearchSegmentation::switchToSelectiveSearchQuality(base_k)
        public void switchToSelectiveSearchQuality(int base_k) {
            ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchQuality_12(nativeObj, base_k);

            return;
#else
            return;
#endif
        }

        //javadoc: SelectiveSearchSegmentation::switchToSelectiveSearchQuality()
        public void switchToSelectiveSearchQuality() {
            ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchQuality_13(nativeObj);

            return;
#else
            return;
#endif
        }


        //
        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::switchToSingleStrategy(int k = 200, float sigma = 0.8f)
        //

        //javadoc: SelectiveSearchSegmentation::switchToSingleStrategy(k, sigma)
        public void switchToSingleStrategy(int k, float sigma) {
            ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_switchToSingleStrategy_10(nativeObj, k, sigma);

            return;
#else
            return;
#endif
        }

        //javadoc: SelectiveSearchSegmentation::switchToSingleStrategy(k)
        public void switchToSingleStrategy(int k) {
            ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_switchToSingleStrategy_11(nativeObj, k);

            return;
#else
            return;
#endif
        }

        //javadoc: SelectiveSearchSegmentation::switchToSingleStrategy()
        public void switchToSingleStrategy() {
            ThrowIfDisposed();
#if (UNITY_ANDROID && !UNITY_EDITOR)

            ximgproc_SelectiveSearchSegmentation_switchToSingleStrategy_12(nativeObj);

            return;
#else
            return;
#endif
        }


#if (UNITY_ANDROID && !UNITY_EDITOR)
        const string LIBNAME = "opencvforunity";



        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::addGraphSegmentation(Ptr_GraphSegmentation g)
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_addGraphSegmentation_10(IntPtr nativeObj, IntPtr g_nativeObj);

        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::addImage(Mat img)
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_addImage_10(IntPtr nativeObj, IntPtr img_nativeObj);

        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::addStrategy(Ptr_SelectiveSearchSegmentationStrategy s)
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_addStrategy_10(IntPtr nativeObj, IntPtr s_nativeObj);

        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::clearGraphSegmentations()
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_clearGraphSegmentations_10(IntPtr nativeObj);

        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::clearImages()
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_clearImages_10(IntPtr nativeObj);

        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::clearStrategies()
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_clearStrategies_10(IntPtr nativeObj);

        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::process(vector_Rect& rects)
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_process_10(IntPtr nativeObj, IntPtr rects_mat_nativeObj);

        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::setBaseImage(Mat img)
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_setBaseImage_10(IntPtr nativeObj, IntPtr img_nativeObj);

        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::switchToSelectiveSearchFast(int base_k = 150, int inc_k = 150, float sigma = 0.8f)
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchFast_10(IntPtr nativeObj, int base_k, int inc_k, float sigma);
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchFast_11(IntPtr nativeObj, int base_k, int inc_k);
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchFast_12(IntPtr nativeObj, int base_k);
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchFast_13(IntPtr nativeObj);

        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::switchToSelectiveSearchQuality(int base_k = 150, int inc_k = 150, float sigma = 0.8f)
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchQuality_10(IntPtr nativeObj, int base_k, int inc_k, float sigma);
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchQuality_11(IntPtr nativeObj, int base_k, int inc_k);
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchQuality_12(IntPtr nativeObj, int base_k);
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_switchToSelectiveSearchQuality_13(IntPtr nativeObj);

        // C++:  void cv::ximgproc::segmentation::SelectiveSearchSegmentation::switchToSingleStrategy(int k = 200, float sigma = 0.8f)
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_switchToSingleStrategy_10(IntPtr nativeObj, int k, float sigma);
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_switchToSingleStrategy_11(IntPtr nativeObj, int k);
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_switchToSingleStrategy_12(IntPtr nativeObj);

        // native support for java finalize()
        [DllImport(LIBNAME)]
        private static extern void ximgproc_SelectiveSearchSegmentation_delete(IntPtr nativeObj);

#endif
    }
}