Пример #1
0
        /// <summary>
        /// 模
        /// </summary>
        /// <param name="image">图片对象</param>
        /// <returns></returns>
        public static Image Model(this Bitmap image)
        {
            using (Mat src = image.ToMat())
            {
                using (Mat sobelX = new Mat())
                {
                    Cv2.Sobel(src, sobelX, MatType.CV_8U, 1, 0, 3, 0.4, 128);
                    using (Mat sobelY = new Mat())
                    {
                        Cv2.Sobel(src, sobelY, MatType.CV_8U, 0, 1, 3, 0.4, 128);

                        Cv2.Sobel(src, sobelX, MatType.CV_16S, 1, 0);
                        Cv2.Sobel(src, sobelY, MatType.CV_16S, 0, 1);

                        // 计算L1模
                        using (Mat sobel = sobelX.Abs() + sobelY.Abs())
                        {
                            double            sobmin, sobmax;
                            OpenCvSharp.Point minLoc, maxLoc;
                            Cv2.MinMaxLoc(sobel, out sobmin, out sobmax, out minLoc, out maxLoc);

                            using (Mat sobelL1Image = new Mat())
                            {
                                sobel.ConvertTo(sobelL1Image, MatType.CV_8U, -255.0 / sobmax, 255);
                                return(sobelL1Image.ToBitmap());
                            }
                        }
                    }
                }
            }
        }
        public void Do(IVideo video)
        {
            Mat frame = video.GetNextFrame();

            while (frame != null)
            {
                frame.ConvertTo(frame, MatType.CV_16SC3);
                Cv2.Subtract(frame, background, difference, _histChessboardModel.SquaresMask);
                difference = difference.Abs().ToMat();
                ShowDiff();

                bool[,] squareState = EstimateSquareStates(difference);
                stateRenderer.Render(squareState);

                frame = video.GetNextFrame();
            }
        }