Exemple #1
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">トラックバーの名前</param>
        /// <param name="window">トラックバーの親ウィンドウ名</param>
        /// <param name="value">スライダの初期位置</param>
        /// <param name="max">スライダの最大値.最小値は常に 0.</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
        /// <param name="userdata"></param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Trackbar name</param>
        /// <param name="window">Window name</param>
        /// <param name="value">Initial slider position</param>
        /// <param name="max">The upper limit of the range this trackbar is working with. </param>
        /// <param name="callback">Callback handler</param>
        /// <param name="userdata"></param>
#endif
        public CvTrackbar(string name, string window, int value, int max, CvTrackbarCallback2 callback, object?userdata)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (string.IsNullOrEmpty(window))
            {
                throw new ArgumentNullException(nameof(window));
            }

            this.name     = name;
            this.window   = window;
            this.value    = value;
            this.max      = max;
            this.callback = callback ?? throw new ArgumentNullException(nameof(callback));
            this.userdata = userdata;

            // userdataをIntPtrに変換
            IntPtr userdataPtr;

            if (userdata != null)
            {
                gchUserdata = GCHandle.Alloc(userdata);
                userdataPtr = GCHandle.ToIntPtr(gchUserdata);
            }
            else
            {
                userdataPtr = IntPtr.Zero;
            }

            this.callback = callback;
            // コールバックdelegateを、userdataをobjectとするように変換
            callbackNative = (pos, ud) =>
            {
                if (ud == IntPtr.Zero)
                {
                    callback(pos, null);
                }
                else
                {
                    var gch = GCHandle.FromIntPtr(ud);
                    callback(pos, gch.Target);
                }
            };

            // コールバックdelegateをポインタに変換
            gchCallback       = GCHandle.Alloc(callback);
            gchCallbackNative = GCHandle.Alloc(callbackNative);
            var callbackPtr = Marshal.GetFunctionPointerForDelegate(callbackNative);

            //gchValue = GCHandle.Alloc(value, GCHandleType.Pinned);

            result = NativeMethods.highgui_createTrackbar(name, window, ref this.value, max, callbackPtr, userdataPtr);

            if (result == 0)
            {
                throw new OpenCvSharpException("Failed to create CvTrackbar.");
            }
        }
Exemple #2
0
        /// <summary>
        /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す
        /// </summary>
        /// <param name="name">トラックバーの名前</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
#else
        /// <summary>
        /// Creates the trackbar and attaches it to this window
        /// </summary>
        /// <param name="name">Name of created trackbar. </param>
        /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param>
        /// <returns></returns>
#endif
        public CvTrackbar CreateTrackbar(string name, CvTrackbarCallback2 callback)
        {
            CvTrackbar trackbar = new CvTrackbar(name, this.name, callback);

            trackbars.Add(name, trackbar);
            return(trackbar);
        }
Exemple #3
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">トラックバーの名前</param>
        /// <param name="window">トラックバーの親ウィンドウ名</param>
        /// <param name="value">スライダの初期位置</param>
        /// <param name="max">スライダの最大値.最小値は常に 0.</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Trackbar name</param>
        /// <param name="window">Window name</param>
        /// <param name="value">Initial slider position</param>
        /// <param name="max">The upper limit of the range this trackbar is working with. </param>
        /// <param name="callback">Callback handler</param>
#endif
        public CvTrackbar(string name, string window, int value, int max, CvTrackbarCallback2 callback)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (string.IsNullOrEmpty(window))
            {
                throw new ArgumentNullException(nameof(window));
            }
            if (callback == null)
            {
                throw new ArgumentNullException(nameof(callback));
            }

            this.name     = name;
            this.window   = window;
            this.value    = value;
            this.max      = max;
            this.callback = callback;

            gchValue    = GCHandle.Alloc(value, GCHandleType.Pinned);
            gchCallback = GCHandle.Alloc(callback);
            IntPtr callbackPtr = Marshal.GetFunctionPointerForDelegate(callback);

            result = NativeMethods.highgui_createTrackbar(name, window, ref this.value, max, callbackPtr, IntPtr.Zero);

            if (result == 0)
            {
                throw new OpenCvSharpException("Failed to create CvTrackbar.");
            }
        }
Exemple #4
0
 internal static extern int cvCreateTrackbar2(
     string trackbar_name,
     string window_name,
     ref int value,
     int count,
     CvTrackbarCallback2 on_change,
     IntPtr userdata);
Exemple #5
0
        /// <summary>
        /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す
        /// </summary>
        /// <param name="name">トラックバーの名前</param>
        /// <param name="value">スライダの初期位置</param>
        /// <param name="max">スライダの最大値.最小値は常に 0.</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
#else
        /// <summary>
        /// Creates the trackbar and attaches it to this window
        /// </summary>
        /// <param name="name">Name of created trackbar. </param>
        /// <param name="value">The position of the slider</param>
        /// <param name="max">Maximal position of the slider. Minimal position is always 0. </param>
        /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param>
        /// <returns></returns>
#endif
        public CvTrackbar CreateTrackbar(string name, int value, int max, CvTrackbarCallback2 callback)
        {
            var trackbar = new CvTrackbar(name, this.name, value, max, callback, null);

            trackbars.Add(name, trackbar);
            return(trackbar);
        }
Exemple #6
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">トラックバーの名前</param>
        /// <param name="window">トラックバーの親ウィンドウ名</param>
        /// <param name="value">スライダの初期位置</param>
        /// <param name="max">スライダの最大値.最小値は常に 0.</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Trackbar name</param>
        /// <param name="window">Window name</param>
        /// <param name="value">Initial slider position</param>
        /// <param name="max">The upper limit of the range this trackbar is working with. </param>
        /// <param name="callback">Callback handler</param>
#endif
        public CvTrackbar(string name, string window, int value, int max, CvTrackbarCallback2 callback)
        {
            if (string.IsNullOrEmpty(name))
                throw new ArgumentNullException("name");
            if (string.IsNullOrEmpty(window))
                throw new ArgumentNullException("window");
            if (callback == null)
                throw new ArgumentNullException("callback");

            this.name = name;
            this.window = window;
            this.value = value;
            this.max = max;
            this.callback = callback;

            gchValue = GCHandle.Alloc(value, GCHandleType.Pinned);
            gchCallback = GCHandle.Alloc(callback);
            IntPtr callbackPtr = Marshal.GetFunctionPointerForDelegate(callback);
#if DEBUG
            int result = NativeMethods.cvCreateTrackbar(name, window, ref value, max, callback);
#else
            result = NativeMethods.highgui_createTrackbar(name, window, ref value, max, callbackPtr, IntPtr.Zero);
#endif
            if (result == 0)
                throw new OpenCvSharpException("Failed to create CvTrackbar.");
        }
Exemple #7
0
        /// <summary>
        /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す
        /// </summary>
        /// <param name="name">トラックバーの名前</param>
        /// <param name="value">スライダの初期位置</param>
        /// <param name="max">スライダの最大値.最小値は常に 0.</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
        /// <param name="userdata"></param>
#else
        /// <summary>
        /// Creates the trackbar and attaches it to this window
        /// </summary>
        /// <param name="name">Name of created trackbar. </param>
        /// <param name="value">The position of the slider</param>
        /// <param name="max">Maximal position of the slider. Minimal position is always 0. </param>
        /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param>
        /// <param name="userdata"></param>
        /// <returns></returns>
#endif
        public CvTrackbar CreateTrackbar2(string name, int value, int max, CvTrackbarCallback2 callback, object userdata)
        {
            CvTrackbar trackbar = new CvTrackbar(name, this.name, value, max, callback, userdata);

            trackbars.Add(name, trackbar);
            return(trackbar);
        }
        /// <summary>
        /// Creates a trackbar and attaches it to the specified window.
        /// The function createTrackbar creates a trackbar(a slider or range control) with the specified name
        /// and range, assigns a variable value to be a position synchronized with the trackbar and specifies
        /// the callback function onChange to be called on the trackbar position change.The created trackbar is
        /// displayed in the specified window winname.
        /// </summary>
        /// <param name="trackbarName">Name of the created trackbar.</param>
        /// <param name="winName">Name of the window that will be used as a parent of the created trackbar.</param>
        /// <param name="value">Optional pointer to an integer variable whose value reflects the position of the slider.Upon creation,
        ///  the slider position is defined by this variable.</param>
        /// <param name="count">Maximal position of the slider. The minimal position is always 0.</param>
        /// <param name="onChange">Pointer to the function to be called every time the slider changes position.
        /// This function should be prototyped as void Foo(int, void\*); , where the first parameter is the trackbar
        /// position and the second parameter is the user data(see the next parameter). If the callback is
        /// the NULL pointer, no callbacks are called, but only value is updated.</param>
        /// <param name="userdata">User data that is passed as is to the callback. It can be used to handle trackbar events without using global variables.</param>
        /// <returns></returns>
        public static int CreateTrackbar(string trackbarName, string winName,
                                         ref int value, int count, CvTrackbarCallback2 onChange = null, IntPtr userdata = default(IntPtr))
        {
            if (trackbarName == null)
            {
                throw new ArgumentNullException(nameof(trackbarName));
            }
            if (winName == null)
            {
                throw new ArgumentNullException(nameof(winName));
            }

            if (onChange == null)
            {
                return(NativeMethods.highgui_createTrackbar(trackbarName, winName, ref value, count, IntPtr.Zero, userdata));
            }
            return(NativeMethods.highgui_createTrackbar(trackbarName, winName, ref value, count, onChange, userdata));
        }
Exemple #9
0
        public Mat Crop()
        {
            using (CroppingWindow = new OpenCvSharp.Window("Cropper", WindowMode.FullScreen, srcImage))
            {
                CvMouseCallback onMouse = new CvMouseCallback(mouseCallback);
                CroppingWindow.SetMouseCallback(onMouse);
                CvTrackbarCallback2 onZoom = new CvTrackbarCallback2(trackbarCallback);
                CvTrackbar          zoom   = CroppingWindow.CreateTrackbar2("Zoom", 100, 200, onZoom, null);
                Cv2.WaitKey();

                // This line is very important
                // OpenCV is written in C++, which means it's unmanaged.
                // So when a delegate callback variable is passed to it as a function point,
                // GC in C# can no longer identify the life cycle of this delegate variable
                // It's our reponsebility to make sure GC in C# will not collect it when it's still in use.
                // Otherwise an exception will be thrown.
                GC.KeepAlive(onMouse);
            }
            // seems that srcImage will be released by GC, so I must return a copy of it
            return(srcImage.Clone());
        }
Exemple #10
0
        public QtTest()
        {
            using (CvWindow window = new CvWindow("window", WindowMode.ExpandedGui))
                using (IplImage img = new IplImage(Const.ImageLenna, LoadMode.Color))
                {
                    if (CvWindow.HasQt)
                    {
                        // cvAddText
                        CvFont font = new CvFontQt("MS UI Gothic", 48, CvColor.Red, FontWeight.Bold, FontStyle.Italic);
                        img.AddText("Hello Qt!!", new CvPoint(50, img.Height - 50), font);

                        // cvDisplayOverlay, cvDisplayStatusBar
                        window.DisplayOverlay("overlay text", 2000);
                        window.DisplayStatusBar("statusbar text", 3000);

                        // cvCreateButton
                        CvButtonCallback buttonCallback = delegate(int state, object userdata)
                        {
                            Console.WriteLine("Button state:{0} userdata:{1} ({2})", state, userdata, userdata.GetType());
                        };
                        Cv.CreateButton("button1", buttonCallback, "my userstate", ButtonType.Checkbox, 0);
                        Cv.CreateButton("button2", buttonCallback, 12345.6789, ButtonType.Checkbox, 0);

                        // cvSaveWindowParameters
                        //window.SaveWindowParameters();
                    }

                    window.ShowImage(img);

                    // cvCreateTrackbar2
                    CvTrackbarCallback2 trackbarCallback = delegate(int pos, object userdata)
                    {
                        Console.WriteLine("Trackbar pos:{0} userdata:{1} ({2})", pos, userdata, userdata.GetType());
                    };
                    window.CreateTrackbar2("trackbar1", 128, 256, trackbarCallback, "foobar");

                    Cv.WaitKey();
                }
        }
 public static extern int highgui_createTrackbar([MarshalAs(UnmanagedType.LPStr)] string trackbarName, [MarshalAs(UnmanagedType.LPStr)] string winName,
                                                 ref int value, int count, [MarshalAs(UnmanagedType.FunctionPtr)] CvTrackbarCallback2 onChange, IntPtr userData);
Exemple #12
0
        /// <summary>
        /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す
        /// </summary>
        /// <param name="name">トラックバーの名前</param>
        /// <param name="value">スライダの初期位置</param>
        /// <param name="max">スライダの最大値.最小値は常に 0.</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
        /// <param name="userdata"></param>
#else
        /// <summary>
        /// Creates the trackbar and attaches it to this window
        /// </summary>
        /// <param name="name">Name of created trackbar. </param>
        /// <param name="value">The position of the slider</param>
        /// <param name="max">Maximal position of the slider. Minimal position is always 0. </param>
        /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param>
        /// <param name="userdata"></param>
        /// <returns></returns>
#endif
        public CvTrackbar CreateTrackbar2(string name, int value, int max, CvTrackbarCallback2 callback, object userdata)
        {
            CvTrackbar trackbar = new CvTrackbar(name, this._name, value, max, callback, userdata);
            _trackbars.Add(name, trackbar);
            return trackbar;
        }
Exemple #13
0
    /// <summary>
    /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す
    /// </summary>
    /// <param name="name">トラックバーの名前</param>
    /// <param name="value">スライダの初期位置</param>
    /// <param name="max">スライダの最大値.最小値は常に 0.</param>
    /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
#else
        /// <summary>
        /// Creates the trackbar and attaches it to this window
        /// </summary>
        /// <param name="name">Name of created trackbar. </param>
        /// <param name="value">The position of the slider</param>
        /// <param name="max">Maximal position of the slider. Minimal position is always 0. </param>
        /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param>
        /// <returns></returns>
#endif
        public CvTrackbar CreateTrackbar(string name, int value, int max, CvTrackbarCallback2 callback)
        {
            CvTrackbar trackbar = new CvTrackbar(name, this.name, value, max, callback);
            trackbars.Add(name, trackbar);
            return trackbar;
        }
Exemple #14
0
        /// <summary>
        /// 初期化(目盛りは0~100)
        /// </summary>
        /// <param name="name">トラックバーの名前</param>
        /// <param name="window">トラックバーの親ウィンドウ名</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
#else
        /// <summary>
        /// Constructor (value=0, max=100)
        /// </summary>
        /// <param name="name">Trackbar name</param>
        /// <param name="window">Window name</param>
        /// <param name="callback">Callback handler</param>
#endif
        public CvTrackbar(string name, string window, CvTrackbarCallback2 callback)
            : this(name, window, 0, 100, callback)
        {
        }
Exemple #15
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">トラックバーの名前</param>
        /// <param name="window">トラックバーの親ウィンドウ名</param>
        /// <param name="value">スライダの初期位置</param>
        /// <param name="max">スライダの最大値.最小値は常に 0.</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
        /// <param name="userdata"></param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Trackbar name</param>
        /// <param name="window">Window name</param>
        /// <param name="value">Initial slider position</param>
        /// <param name="max">The upper limit of the range this trackbar is working with. </param>
        /// <param name="callback">Callback handler</param>
        /// <param name="userdata"></param>
#endif
        public CvTrackbar(string name, string window, int value, int max, CvTrackbarCallback2 callback, object userdata)
        {
            if (string.IsNullOrEmpty(name))
                throw new ArgumentNullException(nameof(name));
            if (string.IsNullOrEmpty(window))
                throw new ArgumentNullException(nameof(window));
            if (callback == null)
                throw new ArgumentNullException(nameof(callback));

            this.name = name;
            this.window = window;
            this.value = value;
            this.max = max;
            this.callback = callback;
            this.userdata = userdata;

            // userdataをIntPtrに変換
            IntPtr userdataPtr;
            if (userdata != null)
            {
                gchUserdata = GCHandle.Alloc(userdata);
                userdataPtr = GCHandle.ToIntPtr(gchUserdata);
            }
            else
            {
                userdataPtr = IntPtr.Zero;
            }

            this.callback = callback;
            // コールバックdelegateを、userdataをobjectとするように変換                
            callbackNative = delegate(int pos, IntPtr ud)
            {
                if (ud == IntPtr.Zero)
                {
                    callback(pos, null);
                }
                else
                {
                    GCHandle gch = GCHandle.FromIntPtr(ud);
                    callback(pos, gch.Target);
                }
            };

            // コールバックdelegateをポインタに変換                
            gchCallback = GCHandle.Alloc(callback);
            gchCallbackNative = GCHandle.Alloc(callbackNative);
            IntPtr callbackPtr = Marshal.GetFunctionPointerForDelegate(callbackNative);

            gchValue = GCHandle.Alloc(value, GCHandleType.Pinned);

            result = NativeMethods.highgui_createTrackbar(name, window, ref this.value, max, callbackPtr, userdataPtr);

            if (result == 0)
                throw new OpenCvSharpException("Failed to create CvTrackbar.");
        }
Exemple #16
0
        /// <summary>
        /// 初期化(目盛りは0~100)
        /// </summary>
        /// <param name="name">トラックバーの名前</param>
        /// <param name="window">トラックバーの親ウィンドウ名</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
#else
        /// <summary>
        /// Constructor (value=0, max=100)
        /// </summary>
        /// <param name="name">Trackbar name</param>
        /// <param name="window">Window name</param>
        /// <param name="callback">Callback handler</param>
#endif
        public CvTrackbar(string name, string window, CvTrackbarCallback2 callback)
            : this(name, window, 0, 100, callback)
        {
        }
Exemple #17
0
        /// <summary>
        /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す
        /// </summary>
        /// <param name="trackbarName">トラックバーの名前</param>
        /// <param name="value">スライダの初期位置</param>
        /// <param name="max">スライダの最大値.最小値は常に 0.</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
        /// <param name="userdata"></param>
#else
        /// <summary>
        /// Creates the trackbar and attaches it to this window
        /// </summary>
        /// <param name="trackbarName">Name of created trackbar. </param>
        /// <param name="value">The position of the slider</param>
        /// <param name="max">Maximal position of the slider. Minimal position is always 0. </param>
        /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param>
        /// <param name="userdata"></param>
        /// <returns></returns>
#endif
        public CvTrackbar CreateTrackbar2(string trackbarName, int value, int max, CvTrackbarCallback2 callback, object userdata)
        {
            var trackbar = new CvTrackbar(trackbarName, name, value, max, callback, userdata);
            trackbars.Add(trackbarName, trackbar);
            return trackbar;
        }
Exemple #18
0
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="name">トラックバーの名前</param>
        /// <param name="window">トラックバーの親ウィンドウ名</param>
        /// <param name="value">スライダの初期位置</param>
        /// <param name="max">スライダの最大値.最小値は常に 0.</param>
        /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param>
        /// <param name="userdata"></param>
#else
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Trackbar name</param>
        /// <param name="window">Window name</param>
        /// <param name="value">Initial slider position</param>
        /// <param name="max">The upper limit of the range this trackbar is working with. </param>
        /// <param name="callback">Callback handler</param>
        /// <param name="userdata"></param>
#endif
        public CvTrackbar(string name, string window, int value, int max, CvTrackbarCallback2 callback, object userdata)
        {
            if (string.IsNullOrEmpty(name))
                throw new ArgumentNullException("name");
            if (string.IsNullOrEmpty(window))
                throw new ArgumentNullException("window");
            if (callback == null)
                throw new ArgumentNullException("callback");

            _name = name;
            _window = window;
            _value = value;
            _max = max;
            _callback = callback;
            _userdata = userdata;

            // userdataをIntPtrに変換
            IntPtr userdataPtr;
            if (userdata != null)
            {
                _gchUserdata = GCHandle.Alloc(_userdata);
                userdataPtr = GCHandle.ToIntPtr(_gchUserdata);
            }
            else
            {
                userdataPtr = IntPtr.Zero;
            }

            _callback = callback;
            // コールバックdelegateを、userdataをobjectとするように変換                
            _callbackNative = delegate(int pos, IntPtr ud)
            {
                if (ud == IntPtr.Zero)
                {
                    callback(pos, null);
                }
                else
                {
                    GCHandle gch = GCHandle.FromIntPtr(ud);
                    callback(pos, gch.Target);
                }
            };

            // コールバックdelegateをポインタに変換                
            _gchCallback = GCHandle.Alloc(callback);
            _gchCallbackNative = GCHandle.Alloc(_callbackNative);
            IntPtr callbackPtr = Marshal.GetFunctionPointerForDelegate(_callbackNative);

            _gchValue = GCHandle.Alloc(value, GCHandleType.Pinned);
#if DEBUG
            int result = CvInvoke.cvCreateTrackbar2(name, window, ref value, max, _callbackNative, userdataPtr);
#else
            _result = CvInvoke.cvCreateTrackbar2(name, window, ref value, max, callbackPtr, userdataPtr);
#endif
            if (_result == 0)
                throw new OpenCvSharpException("Failed to create CvTrackbar.");
        }