コード例 #1
0
        private void Recognize()
        {
            //settings
            processor.minContourLength = _contourLength;
            processor.minContourArea   = _contourArea;
            processor.finder.maxACFDescriptorDeviation = _maxACFDesc;
            processor.finder.minACF = _minACF;
            processor.finder.minICF = _minICF;


            if (_originFrame == null)
            {
                return;
            }
            Image <Bgr, byte> frame = new Image <Bgr, byte>(BitmapConvert.BitmapImageToBitmap(_originFrame));

            //process image
            processor.ProcessImage(frame);


            Font font = new Font("Times New Roman", 24);//16

            Bitmap bmpFrame = frame.ToBitmap();

            Graphics e = Graphics.FromImage(bmpFrame);

            //e.DrawString(lbFPS.Content.ToString(), new Font("Times New Roman", 16), Brushes.Yellow, new PointF(1, 1));

            Brush bgBrush   = new SolidBrush(Color.Blue);
            Brush foreBrush = new SolidBrush(Color.Red);
            Pen   borderPen = new Pen(Color.FromArgb(150, 0, 255, 0));

            //
            if (_showContours)
            {
                foreach (var contour in processor.contours)
                {
                    if (contour.Size > 1)
                    {
                        e.DrawLines(Pens.Red, contour.ToArray());
                    }
                }
            }
            //
            lock (processor.foundTemplates)
                foreach (FoundTemplateDesc found in processor.foundTemplates)
                {
                    //做什么??
                    if (found.template.name.EndsWith(".png") || found.template.name.EndsWith(".jpg"))
                    {
                        DrawAugmentedReality(found, e);
                        continue;
                    }

                    Rectangle            foundRect = found.sample.contour.SourceBoundingRect;
                    System.Drawing.Point p1        = new System.Drawing.Point((foundRect.Left + foundRect.Right) / 2, foundRect.Top);
                    string text = found.template.name;

                    e.DrawRectangle(borderPen, foundRect);
                    e.DrawString(text, font, bgBrush, new PointF(p1.X + 1 - font.Height / 3, p1.Y + 1 - font.Height));
                    e.DrawString(text, font, foreBrush, new PointF(p1.X - font.Height / 3, p1.Y - font.Height));
                }

            _frame = BitmapConvert.toBitmapImage(bmpFrame);

            base.OnPropertyChanged("Frame");
        }
コード例 #2
0
        private void EdgeDetect()
        {
            if (_image != null)
            {
                try
                {
                    if (_isChecked)
                    {
                        _progressValue = 0;
                        base.OnPropertyChanged("ProgressValue");

                        Bitmap _bmpImage = BitmapConvert.BitmapImageToBitmap(_image);

                        Bitmap edge;
                        Canny.DetectCannyEdges(_bmpImage, out edge, _kernelSize, _sigma, _thrHigh, _thrLow);

                        _cannyImage = BitmapConvert.toBitmapImage(edge);
                        base.OnPropertyChanged("CannyImage");

                        Bitmap gf, np, se, we;
                        Canny.GaussianFilter(_bmpImage, out gf, _kernelSize, _sigma);
                        _GFImage = BitmapConvert.toBitmapImage(gf);
                        base.OnPropertyChanged("GFImage");

                        Canny.Suppression(_bmpImage, out np, _kernelSize, _sigma);
                        _NMSImage = BitmapConvert.toBitmapImage(np);
                        base.OnPropertyChanged("NMSImage");

                        Canny.Threshold(_bmpImage, out se, out we, _kernelSize, _sigma, _thrHigh, _thrLow);
                        _WEImage = BitmapConvert.toBitmapImage(we);
                        base.OnPropertyChanged("WEImage");
                        _SEImage = BitmapConvert.toBitmapImage(se);
                        base.OnPropertyChanged("SEImage");
                    }
                    else
                    {
                        Bitmap _bmpImage = BitmapConvert.BitmapImageToBitmap(_image);
                        //获得灰度图
                        Image <Gray, byte> grayFrame = new Image <Gray, byte>(_bmpImage);


                        if (_equalizeHist)
                        {
                            grayFrame._EqualizeHist();//autocontrast
                        }
                        //高斯平滑
                        Image <Gray, byte> smoothedGrayFrame = grayFrame.PyrDown();
                        smoothedGrayFrame = smoothedGrayFrame.PyrUp();

                        //canny
                        Image <Gray, byte> cannyFrame = null;
                        if (_smooth)
                        {
                            cannyFrame = smoothedGrayFrame.Canny(_thresh, _threshLinking);
                            grayFrame  = smoothedGrayFrame;
                        }
                        else
                        {
                            grayFrame = grayFrame.Canny(_thresh, _threshLinking);
                        }

                        //局部自适应阈值二值化,阈值本身作为了一个变量,检测更有效
                        //CvInvoke.cvAdaptiveThreshold(grayFrame, grayFrame, 255, Emgu.CV.CvEnum.ADAPTIVE_THRESHOLD_TYPE.CV_ADAPTIVE_THRESH_MEAN_C, Emgu.CV.CvEnum.THRESH.CV_THRESH_BINARY, adaptiveThresholdBlockSize + adaptiveThresholdBlockSize % 2 + 1, adaptiveThresholdParameter);
                        CvInvoke.AdaptiveThreshold(grayFrame, grayFrame, 255, Emgu.CV.CvEnum.AdaptiveThresholdType.MeanC, Emgu.CV.CvEnum.ThresholdType.Binary, _blockSize + _blockSize % 2 + 1, _parameter);

                        //
                        grayFrame._Not();
                        //
                        if (cannyFrame != null)
                        {
                            grayFrame._Or(cannyFrame);    //试验了一下,这样轮廓会更加明显
                        }
                        _cannyImage = BitmapConvert.toBitmapImage(grayFrame.ToBitmap());
                        base.OnPropertyChanged("CannyImage");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
コード例 #3
0
        public DashboardGraphString GetGraphsString()
        {
            var graphs = new DashboardGraphString();

            if (_context.Dashboards.Count() > 0)
            {
                // Přepověď teploty a srážek
                if (_context.WeatherForecast != null)
                {
                    var weatherForecastId = _context.WeatherForecast.LastOrDefault().Id;

                    var hourlyForecast = _context.WeatherForecastHourlyState.Where(t => t.WeatherForecastId == weatherForecastId)
                                         .OrderBy(m => m.DateTime);

                    // Graf venkovní teploty a srážek
                    var cmlChart = new CMLChart();

                    //cmlChart.Label = "Předpověď počasí";

                    cmlChart.AsixXPaint = new SKPaint {
                        TextSize = 10, Color = SKColors.White
                    };
                    cmlChart.AsixYPaint = new SKPaint {
                        TextSize = 12, Color = SKColors.White
                    };
                    cmlChart.BarPaint = new SKPaint {
                        TextSize = 10, Color = SKColors.White
                    };
                    cmlChart.LinePaint = new SKPaint {
                        TextSize = 10, Color = SKColors.White
                    };
                    cmlChart.TitlePaint = new SKPaint {
                        TextSize = 14, Color = SKColors.White
                    };
                    cmlChart.BorderPaint = new SKPaint {
                        TextSize = 10, Color = SKColors.Black
                    };

                    var horly = hourlyForecast.Select(t => t.DateTime.Hour.ToString()).ToArray();
                    cmlChart.XAsix = new CMLChartXAsix(horly, CMLValuesType.Hourly);

                    var temperatureForecastValues   = hourlyForecast.Select(t => t.Temperature).ToArray();
                    var precipitationForecastValues = hourlyForecast.Select(t => t.Rain + t.Snow).ToArray();

                    cmlChart.YAsixs = new List <CMLChartYAsix>();
                    cmlChart.YAsixs.Add(new CMLChartYAsix("Teplota (°C)", true, Color.Black, Color.Black, temperatureForecastValues, 1, PresentationType.Line, Location.Left, true));
                    cmlChart.YAsixs.Add(new CMLChartYAsix("Srážky (mm)", true, Color.Black, Color.Black, precipitationForecastValues, 2, PresentationType.Bar, Location.Right, false));

                    // Nastavení maximalní hodnoty na ose Y pro výše srážek. Ostaní min/max jsou defaultně min/max hodnoty
                    cmlChart.YAsixs.Where(t => t.Id == 1).FirstOrDefault().MinValue = Math.Min(0, temperatureForecastValues.Min());;
                    cmlChart.YAsixs.Where(t => t.Id == 2).FirstOrDefault().MaxValue = 4;

                    // :TODO: nastavit hodnoty velikosti obrázku grafu
                    int width            = 400;
                    int height           = 200;
                    var chartImageBitmap = cmlChart.GetBitmap(width, height);

                    var bitmapConvert = new BitmapConvert(chartImageBitmap);
                    graphs.OutdoorTemperatureGraphString = bitmapConvert.GetBitmapByString();
                }
            }
            return(graphs);
        }
コード例 #4
0
ファイル: MapModelFactory.cs プロジェクト: milkmanmatty/Mappy
        private Bitmap ToBitmap(byte[] tile)
        {
            var bmp = BitmapConvert.ToBitmap(tile, MapConstants.TileWidth, MapConstants.TileHeight);

            return(this.tileCache.GetOrAddBitmap(bmp));
        }
コード例 #5
0
ファイル: MapModelFactory.cs プロジェクト: milkmanmatty/Mappy
 private static Bitmap ToBitmap(MinimapInfo minimap)
 {
     return(BitmapConvert.ToBitmap(minimap.Data, minimap.Width, minimap.Height));
 }
コード例 #6
0
 private byte[] ToBytes(Bitmap tile)
 {
     return(BitmapConvert.ToBytes(tile));
 }