| 
 | 1 | +using OpenCvSharp;  | 
 | 2 | +using System;  | 
 | 3 | +using System.Diagnostics;  | 
 | 4 | + | 
 | 5 | +namespace SamplesCS.Samples  | 
 | 6 | +{  | 
 | 7 | +    internal class WindowGUISample : ISample  | 
 | 8 | +    {  | 
 | 9 | + | 
 | 10 | +        Mat WindowImage = new Mat("./Resource.png", ImreadModes.AnyColor); // Set your Resource  | 
 | 11 | + | 
 | 12 | +        public void Run()  | 
 | 13 | +        {  | 
 | 14 | +            Windows_Example();  | 
 | 15 | +            TrackBar_Example();  | 
 | 16 | +            MouseCallBack_Example();  | 
 | 17 | +        }  | 
 | 18 | +        /*  | 
 | 19 | +        public enum Category  | 
 | 20 | +        {  | 
 | 21 | +            Windows,  | 
 | 22 | +            TrackBar,  | 
 | 23 | +            MouseCallBack  | 
 | 24 | +        }  | 
 | 25 | +        */  | 
 | 26 | +        /*  | 
 | 27 | +        public void Run(Category category)  | 
 | 28 | +        {  | 
 | 29 | +            switch (category) {  | 
 | 30 | +                case Category.Windows:  | 
 | 31 | +                    Windows_Example();  | 
 | 32 | +                    break;  | 
 | 33 | +                case Category.TrackBar:  | 
 | 34 | +                    TrackBar_Example();  | 
 | 35 | +                    break;  | 
 | 36 | +                case Category.MouseCallBack:  | 
 | 37 | +                    MouseCallBack_Example();  | 
 | 38 | +                    break;  | 
 | 39 | +            }  | 
 | 40 | +        }  | 
 | 41 | +        */  | 
 | 42 | + | 
 | 43 | +        public void Windows_Example()  | 
 | 44 | +        {  | 
 | 45 | +            var openCloseWindow = new Window("OpenCVWindow", WindowMode.AutoSize, WindowImage);  | 
 | 46 | +            Debug.WriteLine(Cv2.WaitKey());  | 
 | 47 | +        }  | 
 | 48 | +          | 
 | 49 | +        public void MouseCallBack_Example()  | 
 | 50 | +        {  | 
 | 51 | +            using Window foo = new Window("OpenCVWindow", WindowMode.AutoSize, WindowImage);  | 
 | 52 | +            Cv2.SetMouseCallback(foo.Name, CallbackOpenCVAnnotate);  | 
 | 53 | +            Cv2.WaitKey();  | 
 | 54 | +        }  | 
 | 55 | + | 
 | 56 | +        private void CallbackOpenCVAnnotate(MouseEvent e, int x, int y, MouseEvent flags, IntPtr userdata)  | 
 | 57 | +        {  | 
 | 58 | +            if (e == MouseEvent.LButtonDown)  | 
 | 59 | +            {  | 
 | 60 | +                Debug.WriteLine(x + "," + y + " Down");  | 
 | 61 | +            }  | 
 | 62 | +            else if (flags == MouseEvent.FlagLButton)  | 
 | 63 | +            {  | 
 | 64 | +                Debug.WriteLine(x + "," + y + " flags");  | 
 | 65 | +            }  | 
 | 66 | +            else if (e == MouseEvent.LButtonUp)  | 
 | 67 | +            {  | 
 | 68 | +                Debug.WriteLine(x + "," + y + " Up");  | 
 | 69 | +            }  | 
 | 70 | +            else if (e == MouseEvent.MouseWheel)  | 
 | 71 | +            {  | 
 | 72 | +                Debug.WriteLine(x + "," + y + " Wheel");  | 
 | 73 | +            }  | 
 | 74 | +        }  | 
 | 75 | + | 
 | 76 | +        public void TrackBar_Example()  | 
 | 77 | +        {  | 
 | 78 | +            using var src = WindowImage;  | 
 | 79 | +            using var dst = new Mat();  | 
 | 80 | + | 
 | 81 | +            src.CopyTo(dst);  | 
 | 82 | + | 
 | 83 | +            var elementShape = MorphShapes.Rect;  | 
 | 84 | +            var maxIterations = 10;  | 
 | 85 | + | 
 | 86 | +            var openCloseWindow = new Window("Open/Close", image: dst);  | 
 | 87 | +            var openCloseTrackbar = openCloseWindow.CreateTrackbar(  | 
 | 88 | +                trackbarName: "Iterations",   | 
 | 89 | +                value: 10,   | 
 | 90 | +                max: maxIterations * 2 + 1,  | 
 | 91 | +                callback: (pos, obj) =>  | 
 | 92 | +                {  | 
 | 93 | +                    var n = pos - maxIterations;  | 
 | 94 | +                    var an = n > 0 ? n : -n;  | 
 | 95 | +                    using var element = Cv2.GetStructuringElement(  | 
 | 96 | +                            elementShape,  | 
 | 97 | +                            new Size(an * 2 + 1, an * 2 + 1),  | 
 | 98 | +                            new Point(an, an));  | 
 | 99 | + | 
 | 100 | +                    if (n < 0)  | 
 | 101 | +                    {  | 
 | 102 | +                        Cv2.MorphologyEx(src, dst, MorphTypes.Open, element);  | 
 | 103 | +                    }  | 
 | 104 | +                    else  | 
 | 105 | +                    {  | 
 | 106 | +                        Cv2.MorphologyEx(src, dst, MorphTypes.Close, element);  | 
 | 107 | +                    }  | 
 | 108 | + | 
 | 109 | +                    Cv2.PutText(dst, (n < 0) ?  | 
 | 110 | +                        string.Format("Open/Erosion [{0}]", elementShape)  | 
 | 111 | +                        : string.Format("Close/Dilation [{0}]", elementShape),  | 
 | 112 | +                        new Point(10, 15), HersheyFonts.HersheyPlain, 1, Scalar.Black);  | 
 | 113 | +                    openCloseWindow.Image = dst;  | 
 | 114 | +                });  | 
 | 115 | + | 
 | 116 | + | 
 | 117 | +            var erodeDilateWindow = new Window("Erode/Dilate", image: dst);  | 
 | 118 | +            var erodeDilateTrackbar = erodeDilateWindow.CreateTrackbar(  | 
 | 119 | +                trackbarName: "Iterations",   | 
 | 120 | +                value: 10,   | 
 | 121 | +                max: maxIterations * 2 + 1,  | 
 | 122 | +                callback: (pos, obj) =>  | 
 | 123 | +                {  | 
 | 124 | +                    var n = pos - maxIterations;  | 
 | 125 | +                    var an = n > 0 ? n : -n;  | 
 | 126 | +                    using var element = Cv2.GetStructuringElement(  | 
 | 127 | +                            elementShape,  | 
 | 128 | +                            new Size(an * 2 + 1, an * 2 + 1),  | 
 | 129 | +                            new Point(an, an));  | 
 | 130 | +                    if (n < 0)  | 
 | 131 | +                    {  | 
 | 132 | +                        Cv2.Erode(src, dst, element);  | 
 | 133 | +                    }  | 
 | 134 | +                    else  | 
 | 135 | +                    {  | 
 | 136 | +                        Cv2.Dilate(src, dst, element);  | 
 | 137 | +                    }  | 
 | 138 | + | 
 | 139 | +                    Cv2.PutText(dst, (n < 0) ?  | 
 | 140 | +                        string.Format("Erode[{0}]", elementShape) :  | 
 | 141 | +                        string.Format("Dilate[{0}]", elementShape),  | 
 | 142 | +                        new Point(10, 15), HersheyFonts.HersheyPlain, 1, Scalar.Black);  | 
 | 143 | +                    erodeDilateWindow.Image = dst;  | 
 | 144 | +                });  | 
 | 145 | + | 
 | 146 | + | 
 | 147 | +            for (; ; )  | 
 | 148 | +            {  | 
 | 149 | +                var key = Cv2.WaitKey();  | 
 | 150 | + | 
 | 151 | +                if ((char)key == 27) // ESC  | 
 | 152 | +                    break;  | 
 | 153 | + | 
 | 154 | +                switch ((char)key)  | 
 | 155 | +                {  | 
 | 156 | +                    case 'e':  | 
 | 157 | +                        elementShape = MorphShapes.Ellipse;  | 
 | 158 | +                        break;  | 
 | 159 | +                    case 'r':  | 
 | 160 | +                        elementShape = MorphShapes.Rect;  | 
 | 161 | +                        break;  | 
 | 162 | +                    case 'c':  | 
 | 163 | +                        elementShape = MorphShapes.Cross;  | 
 | 164 | +                        break;  | 
 | 165 | +                }  | 
 | 166 | +            }  | 
 | 167 | + | 
 | 168 | +            openCloseWindow.Dispose();  | 
 | 169 | +            erodeDilateWindow.Dispose();  | 
 | 170 | +        }  | 
 | 171 | + | 
 | 172 | +    }  | 
 | 173 | +}  | 
0 commit comments