public static Bitmap RGBfilter(Bitmap source) // rgb 필터 { ///////////// ini 객체 생성 시작 ///////////////////////////////////////////////////// //현재 프로그램이 실행되고 있는정보 가져오기: 디버깅 모드라면 bin/debug/프로그램명.exe FileInfo exefileinfo = new FileInfo(@"C:\Program Files\PLOCR\PLOCR.exe"); string pathini = exefileinfo.Directory.FullName.ToString(); //프로그램 실행되고 있는데 path 가져오기 string fileName = @"\PLOCRconfig.ini"; // 환경설정 파일명 string filePath = pathini + fileName; //ini 파일 경로 DocumentAnalysis.IniUtil ini = new DocumentAnalysis.IniUtil(filePath); // 만들어 놓았던 iniUtil 객체 생성(생성자 인자로 파일경로 정보 넘겨줌) //////////// ini 객체 생성 끝 ///////////////////////////////////////////////////////// int redMin = int.Parse(ini.GetIniValue("색상필터값", "RedMin")); int redMax = int.Parse(ini.GetIniValue("색상필터값", "RedMax")); int greenMin = int.Parse(ini.GetIniValue("색상필터값", "GreenMin")); int greenMax = int.Parse(ini.GetIniValue("색상필터값", "GreenMax")); int blueMin = int.Parse(ini.GetIniValue("색상필터값", "BlueMin")); int blueMax = int.Parse(ini.GetIniValue("색상필터값", "BlueMax")); // create filter ColorFiltering filter = new ColorFiltering(); // set color ranges to keep filter.Red = new IntRange(redMin, redMax); filter.Green = new IntRange(greenMin, greenMax); filter.Blue = new IntRange(blueMin, blueMax); Bitmap processedImage = filter.Apply(source); return(processedImage); }
public Bitmap GetNewFrame(Bitmap source) { var newFrame = _colorFiltering.Apply(source); source.Dispose(); return(newFrame); }
private void CameraPanel_NewFrame(System.Drawing.Bitmap oBitmap) { #region 去除绿色以外其他色、绿色区域绘制边框 Bitmap objectImage = colorFilter.Apply(oBitmap); BitmapData objectData = objectImage.LockBits(new Rectangle(0, 0, oBitmap.Width, oBitmap.Height), ImageLockMode.ReadOnly, oBitmap.PixelFormat); UnmanagedImage grayImage = grayFilter.Apply(new UnmanagedImage(objectData)); objectImage.UnlockBits(objectData); blobCounter1.ProcessImage(grayImage); Rectangle[] rects = blobCounter1.GetObjectsRectangles(); if (rects.Length > 0) { Rectangle objectRect = rects[0]; Graphics g = Graphics.FromImage(oBitmap); using (System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.FromArgb(160, 255, 160), 3)) { g.DrawRectangle(pen, objectRect); } g.Dispose(); } UpdateObjectPicture(objectImage); #endregion //#region 去除绿色以外其他色 //Bitmap objectImage = colorFilter.Apply(oBitmap); //UpdateObjectPicture(objectImage); //#endregion //Bitmap objectImage = SobelEdgeFilter.Apply(oBitmap); //UpdateObjectPicture(objectImage); }
private void cam_NewFrame(object sender, EventArgs e) { curr_c = new Bitmap((Bitmap)source.Frame().Clone(), preBox.Size); if (light) { curr_br = L_brownFilter.Apply(curr_c); } else { curr_br = D_brownFilter.Apply(curr_c); } curr_gs = gs.Apply(curr_c); Action action = () => { processed = ProcessCurrentFrame(); postBox.Image = processed; preBox.Image = curr_c; backBox.Image = back; colourBox.Image = curr_br; }; if (!this.IsDisposed && !this.Disposing) { this.Invoke(action); } }
private Image <Gray, Byte> prepareImg3(System.Drawing.Image img, int threshold, bool invertImg) { // create filter ColorFiltering filter = new ColorFiltering(); // set color ranges to keep //filter.Red = new AForge.IntRange(125, 255); //filter.Green = new AForge.IntRange(0, 95); //filter.Blue = new AForge.IntRange(0, 95); filter.Red = new AForge.IntRange(METState.Current.target_R_min, METState.Current.target_R_max); filter.Green = new AForge.IntRange(METState.Current.target_G_min, METState.Current.target_G_max); filter.Blue = new AForge.IntRange(METState.Current.target_B_min, METState.Current.target_B_max); // apply the filter Bitmap colorChannelImg = filter.Apply((Bitmap)img); temp_Image = colorChannelImg; Image <Gray, Byte> GrayImg = new Image <Gray, byte>((Bitmap)colorChannelImg); EmgImgProcssing = new ImageProcessing_Emgu(); GrayImg = EmgImgProcssing.Filter_Threshold2(GrayImg, threshold, invertImg).Erode(1).Dilate(1); return(GrayImg); }
public void ProcessImage(string urlImage) //Görüntünün işlendiği metot. { Stopwatch watch = Stopwatch.StartNew(); //Görüntünün işlenmesi sırasında süre tutulması için süre başlatılmaktadır. Bitmap root = new Bitmap(urlImage); //Root Image (Default Image) Bitmap bmp = new Bitmap(root); //Resize Image Bitmap bmp1 = new Bitmap(root); //Smoothing Image Bitmap bmp2 = new Bitmap(root); //Color Filtering Image string outputstring = ""; ///Root outputstring = this.Ocr(root); txtNumbePlate1.Text = outputstring; ptBNumberPlate1.Image = root; //Resize Image to : 1920x1080 outputstring = ""; ResizeBilinear filterr = new ResizeBilinear(1920, 1080); bmp = filterr.Apply(bmp); outputstring = this.Ocr(bmp); txtNumbePlate2.Text = outputstring; ptBNumberPlate2.Image = bmp; //Smoothing outputstring = ""; if (BitmapFilter.GaussianBlur(bmp1, 4)) { if (BitmapFilter.GaussianBlur(bmp1, 4)) { if (BitmapFilter.MeanRemoval(bmp1, 9)) { } } } outputstring = this.Ocr(bmp1); txtNumbePlate3.Text = outputstring; ptBNumberPlate3.Image = bmp1; //Color Filtering outputstring = ""; ColorFiltering filter = new ColorFiltering(); filter.Green = new IntRange(175, 255); bmp2 = filter.Apply(bmp2); outputstring = this.Ocr(bmp2); txtNumbePlate4.Text = outputstring; ptBNumberPlate4.Image = bmp2; watch.Stop(); //Stop The Timer lblTime.Text = String.Format("Total Time : {0} Seconds", watch.Elapsed.TotalSeconds); lblCount.Text = position.ToString() + "/" + lstimages.Count.ToString(); System.Threading.Thread.Sleep(5000); }
//rgb private void RGB() { //crop(); Bitmap a = new Bitmap(Original_Image.Image); Bitmap bim = (Bitmap)a.Clone(); BitmapData bitmapData = bim.LockBits( new Rectangle(0, 0, bim.Width, bim.Height), ImageLockMode.ReadWrite, bim.PixelFormat); // step 1 - turn background to black ColorFiltering colorFilter = new ColorFiltering(); colorFilter.Red = new IntRange(130, 195); colorFilter.Green = new IntRange(130, 195); colorFilter.Blue = new IntRange(130, 195); colorFilter.FillOutsideRange = false; bm_crop = colorFilter.Apply(bitmapData); // crop_image.Image = bm_crop; //pictureBox2.Image = bm_crop; //crop_image.Image = Original_Image.Image; //rgb Bitmap bm = (Bitmap)bm_crop; // crop_image.Image; //deklarasi variable double redColors = 0; double greencolors = 0; double blueColor = 0; double pixelColor = 0; for (int y = 0; y < bm.Height; y++) { for (int x = 0; x < bm.Width; x++) { Color c = bm.GetPixel(x, y); if (c.R != 0 && c.G != 0 && c.B != 0) { pixelColor++;//jumlahpixel //mengambil nilai rgb redColors += c.R; greencolors += c.G; blueColor += c.B; } } } //rata-rata nilai rgb double red = (redColors / pixelColor); double green = (greencolors / pixelColor); double blue = (blueColor / pixelColor); red = Math.Round(red, 2); green = Math.Round(green, 2); blue = Math.Round(blue, 2); //textbox txt_R.Text = red.ToString(); txt_G.Text = green.ToString(); txt_B.Text = blue.ToString(); }
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { pictureBox1.Image = new Bitmap(Bitmap.FromFile("C:\\testimg\\" + comboBox1.SelectedIndex + ".png"), pictureBox1.Size); Bitmap channel = selected.Apply((Bitmap)pictureBox1.Image); thresholdFilter = new Threshold(Int32.Parse(textBox1.Text)); thresholdFilter.ApplyInPlace(channel); pictureBox2.Image = channel; pictureBox3.Image = brownFilter.Apply((Bitmap)pictureBox1.Image); }
//For RGB Filtering private void RGBFiltering(Bitmap srcImage) { //Create filter ColorFiltering filter = new ColorFiltering(); //Set color ranges to keep filter.Red = new IntRange(Rmin, Rmax); filter.Green = new IntRange(Gmin, Gmax); filter.Blue = new IntRange(Bmin, Bmax); //Apply the filter RGBImage = filter.Apply(sourceImage); pictureBox2.Image = RGBImage; }
private void AnaliseMap(Bitmap mapImage) { mapData.Clear(); ColorFiltering filter = new ColorFiltering(); Trace.WriteLine("Analysing color map " + mapLocation + "..."); var sortedList = colorMap.SortedActions(); foreach (String action in sortedList) { Color actionColor = colorMap.GetColorFor(action); filter.Red = new IntRange(actionColor.R, actionColor.R); filter.Green = new IntRange(actionColor.G, actionColor.G); filter.Blue = new IntRange(actionColor.B, actionColor.B); using (Bitmap colorFilteredMapImage = filter.Apply(mapImage)) { // Once we have isolated the action color on the map image // we need to find the biggest rectangle left in the map (as there could be noise) BlobCounter bc = new BlobCounter(); bc.ProcessImage(colorFilteredMapImage); Rectangle[] rects = bc.GetObjectsRectangles(); if (rects.Count <Rectangle>() == 0) { Trace.WriteLine("Warning: No rectangles were found for " + actionColor.ToString()); } Rectangle biggestRect = Rectangle.Empty; foreach (Rectangle rect in rects) { // Compare areas if (rect.Width * rect.Height > biggestRect.Width * biggestRect.Height) { biggestRect = rect; } } // Did we find a rectangle? if (!biggestRect.Equals(Rectangle.Empty) && (biggestRect.Width * biggestRect.Height > MIN_AREA_THRESHOLD)) { Trace.WriteLine("Found rectangle for " + action + ": " + biggestRect.ToString()); mapData[action] = biggestRect; } } } }
public static Bitmap RGBFilter(Bitmap img, Interval R, Interval G, Interval B, Color C, Boolean Dir) { img = ImageUtil.convert(img, PixelFormat.Format32bppArgb); ColorFiltering colorFilter = new ColorFiltering(); colorFilter.Red = new IntRange((int)R.Min, (int)R.Max); colorFilter.Green = new IntRange((int)G.Min, (int)G.Max); colorFilter.Blue = new IntRange((int)B.Min, (int)B.Max); colorFilter.FillOutsideRange = Dir; colorFilter.FillColor = new RGB(C); Bitmap filteredImage = colorFilter.Apply(img); return(filteredImage); }
private void process_button_Click(object sender, EventArgs e) { //changes are made here //COLOUR PIXEL FILTERING //if the image is withing the range else discard //point based application var colourPixelFilter = new ColorFiltering(); colourPixelFilter.Red = new AForge.IntRange(90, 238); colourPixelFilter.Green = new AForge.IntRange(60, 180); colourPixelFilter.Blue = new AForge.IntRange(30, 200); var colourPixelOutput = colourPixelFilter.Apply(_inputImage); pictureBoxOutput.Image = colourPixelOutput; }
public static void ColorFilter() { try { Bitmap bmp = Image.FromFile(PATH + @"\test.png") as Bitmap; ColorFiltering filter = new ColorFiltering(); filter.Red = new IntRange(100, 255); filter.Green = new IntRange(0, 75); filter.Green = new IntRange(0, 75); Bitmap newBmp = filter.Apply(bmp); newBmp.Save(PATH + @"\outtest.png"); } catch (Exception ex) { Debug.WriteLine(ex.StackTrace); } }
public static Image FilterImage(this Image imageZ, decimal r1, decimal r2, decimal g1, decimal g2, decimal b1, decimal b2) { var imageX = new Bitmap(imageZ); var image = AForge.Imaging.Image.Clone(imageX, PixelFormat.Format24bppRgb); var filter = new ColorFiltering { FillOutsideRange = true }; var red1 = Convert.ToInt32(r1); var red2 = Convert.ToInt32(r2); var green1 = Convert.ToInt32(g1); var green2 = Convert.ToInt32(g2); var blue1 = Convert.ToInt32(b1); var blue2 = Convert.ToInt32(b2); filter.Red = new IntRange(red1, red2); filter.Green = new IntRange(green1, green2); filter.Blue = new IntRange(blue1, blue2); return(filter.Apply(image)); }
private void Detect(object sender, DoWorkEventArgs e) { while (true) { bool forced = capture.WaitOne(TimeSpan.FromSeconds(3)); using (Graphics g = Graphics.FromImage(current)) { //WriteLog(String.Format("Detect, forced={0}", forced)); Mouse.Click(new Point(bounds.Location.X, bounds.Location.Y + 120), new[] { Mouse.MouseEvent.LeftDown, Mouse.MouseEvent.LeftUp }); g.CopyFromScreen(bounds.Location, Point.Empty, bounds.Size); lock (locker) { tasks.Clear(); } ExhaustiveTemplateMatching actionMatching = new ExhaustiveTemplateMatching { SimilarityThreshold = 0.88f }; ExhaustiveTemplateMatching buttonMatching = new ExhaustiveTemplateMatching { SimilarityThreshold = 0.90f }; BlobCounter actions = new BlobCounter { FilterBlobs = true, MinWidth = 25, MinHeight = 25, MaxWidth = 42, MaxHeight = 42 }; BlobCounter buttons = new BlobCounter { FilterBlobs = true, MinWidth = 60, MinHeight = 25, MaxWidth = 175, MaxHeight = 50 }; Bitmap yellowOnly = keepYellowOnly.Apply(current); //keepYellowOnly.ApplyInPlace(current); Bitmap yellowOnly = current; actions.ProcessImage(yellowOnly); buttons.ProcessImage(yellowOnly); //int n = 0; ////keepYellowOnly.ApplyInPlace(current); // output image with color filter applied ////foreach (Blob blob in buttons.GetObjectsInformation().Concat(actions.GetObjectsInformation())) //// if (!templates.Where(t => t.Icon.Height <= blob.Rectangle.Height && t.Icon.Width <= blob.Rectangle.Width) //// .Any(t => exhaustive.ProcessImage(current, t.Icon, blob.Rectangle).Length == 0)) //foreach (Blob blob in buttons.GetObjectsInformation().Concat(actions.GetObjectsInformation())) //{ // //if (blob.Rectangle.ToString().StartsWith("{X=1291,Y=406")) // //{ // // i += 0; // // var x = actionMatching.ProcessImage(current, templates[11].Icon, blob.Rectangle); // //} // using (Bitmap icon = new Bitmap(blob.Rectangle.Width, blob.Rectangle.Height)) // using (Graphics g1 = Graphics.FromImage(icon)) // { // icon.SetResolution(current.HorizontalResolution, current.VerticalResolution); // g1.DrawImage(current, 0, 0, blob.Rectangle, GraphicsUnit.Pixel); // //g.DrawString(String.Format("{0}", blob.Rectangle), // // new Font("Arial", 10, FontStyle.Bold), Brushes.Black, blob.Rectangle.Location); // icon.Save(String.Format(@"C:\Users\Rubens\Desktop\simcity\{0}.jpg", ++n), ImageFormat.Jpeg); // } // g.FillRectangle(new SolidBrush(Color.FromArgb(128, Color.Yellow)), blob.Rectangle); //} ////current.Save(@"C:\Users\Rubens\Desktop\newIconXXX.png"); #region Identify actions and buttons var items = actions.GetObjectsInformation() .SelectMany(a => templates.Where(t => t.Icon.Height <= a.Rectangle.Height && t.Icon.Width <= a.Rectangle.Width) .Select(t => new { Template = t, Blob = a, Match = actionMatching.ProcessImage(current, t.Icon, a.Rectangle) .OrderBy(i => i.Similarity).FirstOrDefault() })).Concat( buttons.GetObjectsInformation() .SelectMany(a => templates.Where(t => t.Icon.Height <= a.Rectangle.Height && t.Icon.Width <= a.Rectangle.Width) .Select(t => new { Template = t, Blob = a, Match = buttonMatching.ProcessImage(current, t.Icon, a.Rectangle) .OrderBy(i => i.Similarity).FirstOrDefault() }))) .Where(i => i != null) .Where(i => i.Match != null) .OrderByDescending(i => i.Match.Similarity); foreach (var item in items) { Rectangle target = CalculateOffset(item.Match.Rectangle, item.Template.Offset); g.FillRectangle(new SolidBrush(Color.FromArgb(128, item.Template.Color)), item.Match.Rectangle); g.FillRectangle(Brushes.HotPink, target); // click point //g.DrawString(String.Format("{0},{1},{2} ({3:0.00})", target.Location, template.Priority, template.Name, match.Similarity), // new Font("Arial", 10, FontStyle.Bold), Brushes.Black, target.Location); if (!item.Template.AutoClick) { continue; // Auto level up? } Point location = TranslateScreenCoordinates(target); Task task = new Task { Priority = item.Template.Priority, Location = location, MouseEvents = new[] { Mouse.MouseEvent.LeftDown, Mouse.MouseEvent.LeftUp }, Type = item.Template.Name, LastClick = tracker.ContainsKey(location) ? tracker[location]: DateTime.MinValue, Cost = item.Template.Cost, Delay = item.Template.Delay, Refresh = item.Template.Refresh, Similarity = item.Match.Similarity }; lock (locker) { // no existing task on same location if (tasks.All(t => t.Location != task.Location)) { tasks.Add(task); } } } lock (locker) { // Acumular as tarefas antes de executar System.Threading.Monitor.Pulse(locker); } #endregion Refresh(); } } }
/// <summary> /// Called when videoPlayer receives a new frame. /// </summary> /// <param name="sender"></param> /// <param name="image"></param> private void videoPlayer_NewFrame(object sender, ref Bitmap frame) { // use an rgb filter to remove everything but mario's outfit var filter = new ColorFiltering( new IntRange(220, 240), new IntRange(200, 220), new IntRange(160, 180) ); var filteredFrame = filter.Apply(frame); // convert the image to grayscale var gray = new GrayscaleBT709(); var trackingFrame = gray.Apply(filteredFrame); // use a threshold to make the image black & white var threshold = new Threshold(1); threshold.ApplyInPlace(trackingFrame); // apply agressive dilation var dilation = new BinaryDilation3x3(); dilation.ApplyInPlace(trackingFrame); dilation.ApplyInPlace(trackingFrame); dilation.ApplyInPlace(trackingFrame); // use image to mask the original frame var mask = new ApplyMask(trackingFrame); var maskedFrame = mask.Apply(frame); // is the camshift tracker still tracking mario? // - the tracking object cannot be empty // - the tracking rectangle has to be small bool isTracking = tracker.TrackingObject?.IsEmpty == false && tracker.TrackingObject?.Rectangle.Width <= 50; if (!isTracking) { // no - so do a blob search var blobSearch = new BlobCounter(); blobSearch.FilterBlobs = true; blobSearch.MinHeight = 25; blobSearch.MinWidth = 25; blobSearch.ProcessImage(trackingFrame); if (blobSearch.ObjectsCount > 0) { // assume the first blog we find is mario var rectangles = blobSearch.GetObjectsRectangles(); var rect = rectangles.First(); // use camshift to track mario from now on var img = UnmanagedImage.FromManagedImage(maskedFrame); tracker.SearchWindow = rect; tracker.ProcessFrame(img); } } else { // track mario using camshift var img = UnmanagedImage.FromManagedImage(maskedFrame); tracker.ProcessFrame(img); // draw the reticle where mario is var rect = tracker.TrackingObject.Rectangle; rect.Inflate(30, 30); DrawReticle(frame, rect); } // update pictureboxes thresholdedBox.Image = trackingFrame; maskedBox.Image = maskedFrame; frameIndex++; }
public Bitmap Apply(Bitmap input) { return(_filter.Apply(input)); }
public Bitmap DetectRed(Bitmap image) { ColorFiltering cf = new ColorFiltering(new IntRange(150, 255), new IntRange(120, 160), new IntRange(60, 90)); return(cf.Apply(image)); }
private void PlayerNewFrame(object sender, ref Bitmap image) { BrightnessCorrection brightnessFilter = new BrightnessCorrection(brightnessCorrection); brightnessFilter.ApplyInPlace(image); ColorFiltering colorFilter = new ColorFiltering(); colorFilter.Red = new IntRange(rL, rU); colorFilter.Green = new IntRange(gL, gU); colorFilter.Blue = new IntRange(bL, bU); Bitmap objectImage = colorFilter.Apply(image); if (debugTrackingCB.Checked) { image = objectImage; } BlobCounter blobCounter = new BlobCounter(); blobCounter.MinWidth = (int)blobWidth.Value; blobCounter.MinHeight = (int)blobHeight.Value; blobCounter.FilterBlobs = true; blobCounter.ObjectsOrder = ObjectsOrder.Size; Bitmap grayScale = Grayscale.CommonAlgorithms.BT709.Apply(objectImage); blobCounter.ProcessImage(grayScale); Rectangle[] rectangles = blobCounter.GetObjectsRectangles(); if (rectangles.Length > 0) { Rectangle objectRect = rectangles[0]; System.Drawing.Point center = new System.Drawing.Point(); center.X = objectRect.X + (objectRect.Width / 2) - 3; center.Y = objectRect.Y + (objectRect.Height / 2) - 3; Graphics g = Graphics.FromImage(image); using (Pen p = new Pen(Color.Red, 3)) { g.DrawEllipse(p, center.X, center.Y, 6, 6); } g.Dispose(); currentButton = GetButton(center); } else { currentButton = "WAIT"; } Console.WriteLine(currentButton); using (Graphics g = Graphics.FromImage(image)) { using (Pen p = new Pen(Color.Black)) { foreach (ScreenButton s in screenButtons) { Rectangle destRect = new Rectangle(s.location, s.size); Rectangle srcRect = new Rectangle(0, 0, s.image.image.Width, s.image.image.Height); g.DrawImage(s.image.image, destRect, srcRect, GraphicsUnit.Pixel); g.DrawRectangle(p, destRect); } } g.DrawArc(clockPen, clockPosition, -90, 360f * ((float)currentTime / randomizerTimer.Interval)); g.DrawString("Randomize\nTimer", clockTextFont, clockTextBrush, 45, 10); } }
public Bitmap edgeDetection() { Bitmap colorImg = (Bitmap)videoSourcePlayer1.GetCurrentVideoFrame(); Grayscale grayfilter = new Grayscale(cr, cg, cb); GaussianBlur blurFilter = new GaussianBlur(); GaussianSharpen sharpenFilter = new GaussianSharpen(); Bitmap originalImage; if (gausianToggle == 0) { originalImage = (Bitmap)grayfilter.Apply(colorImg); } else if (gausianToggle == 1) { originalImage = sharpenFilter.Apply((Bitmap)colorImg); originalImage = (Bitmap)grayfilter.Apply(originalImage); } else { originalImage = blurFilter.Apply((Bitmap)colorImg); originalImage = (Bitmap)grayfilter.Apply(originalImage); } switch (caseValue) { case 1: //canny scrollableImagePanel1.Image = originalImage; CannyEdgeDetector edgeDectector = new CannyEdgeDetector(); edgeDectector.HighThreshold = (byte)cannyUpperThresholdSlider.Value; edgeDectector.LowThreshold = (byte)cannyLowerThresholdSlider.Value; edgeDectector.ApplyInPlace(scrollableImagePanel1.Image); return((Bitmap)scrollableImagePanel1.Image); case 2: //gray scale scrollableImagePanel3.Image = originalImage; Grayscale customGrayScale = new Grayscale((cr * (graySlider.Value / 100)), (cb * (graySlider.Value / 100)), (cg * (graySlider.Value / 100))); originalImage = customGrayScale.Apply(colorImg); return(originalImage); case 3: //Black and White scrollableImagePanel2.Image = originalImage; Threshold thresholdFilter = new Threshold(); thresholdFilter.ThresholdValue = hScrollBar1.Value; thresholdFilter.ApplyInPlace(scrollableImagePanel2.Image); return((Bitmap)scrollableImagePanel2.Image); case 4: //Mixed Color Edits scrollableImagePanel5.Image = colorImg; ChannelFiltering colorChannelFilter = new ChannelFiltering(); colorChannelFilter.Red = new IntRange(0, redSlider.Value); colorChannelFilter.Blue = new IntRange(0, blueSlider.Value); colorChannelFilter.Green = new IntRange(0, greenSlider.Value); colorChannelFilter.ApplyInPlace((Bitmap)scrollableImagePanel5.Image); return((Bitmap)scrollableImagePanel5.Image); case 5: //Specific Color edits ColorFiltering colorFilter = new ColorFiltering(); if (colorToggle == 1) { Console.WriteLine("Red disabled"); colorFilter.Red = new IntRange(0, 0); colorFilter.Blue = new IntRange(0, 255); colorFilter.Green = new IntRange(0, 255); colorFilter.Apply(colorImg); originalImage = colorImg; return(originalImage); } else if (colorToggle == 2) { Console.WriteLine("Blue disabled"); colorFilter.Red = new IntRange(0, 255); colorFilter.Blue = new IntRange(0, 0); colorFilter.Green = new IntRange(0, 255); colorFilter.Apply(colorImg); originalImage = colorImg; return(originalImage); } else if (colorToggle == 3) { Console.WriteLine("Green disabled"); colorFilter.Red = new IntRange(0, 255); colorFilter.Blue = new IntRange(0, 255); colorFilter.Green = new IntRange(0, 0); colorFilter.Apply(colorImg); originalImage = colorImg; return(originalImage); } else { return(colorImg); } } return(originalImage); }
public void picback() { Bitmap temp1; Bitmap temp2; Bitmap temp3; Bitmap temp4; Bitmap temp5; Bitmap temp6; Bitmap temp7; Bitmap temp8; Bitmap temp9; Bitmap temp10; Bitmap sourceImage; //新建轮廓过滤器 CannyEdgeDetector filter = new CannyEdgeDetector(); //生成颜色过滤器 ColorFiltering colorFilter = new ColorFiltering(); //将颜色过滤器设置为白色 colorFilter.Red = new IntRange(50, 255); colorFilter.Green = new IntRange(50, 255); colorFilter.Blue = new IntRange(50, 255); //从摄像头中截取图像 sourceImage = videoSourcePlayer1.GetCurrentVideoFrame(); //将原图格式化复制 temp1 = AForge.Imaging.Image.Clone(sourceImage, sourceImage.PixelFormat); //清除sourceImage占用 sourceImage.Dispose(); //sourceImage = temp1; int Height = temp1.Size.Height; int Width = temp1.Size.Width; //pictureBox1是原图 //pictureBox1.Image = temp1; //从temp1提取颜色 temp2 = filter.Apply(temp1.PixelFormat != PixelFormat.Format8bppIndexed ? Grayscale.CommonAlgorithms.BT709.Apply(temp1) : temp1); //pictureBox2原图轮廓 //pictureBox2.Image = temp2; //从temp1进行颜色过滤 temp5 = colorFilter.Apply(temp1); //pictureBox5原图轮廓 //pictureBox5.Image = temp5; //从temp5进行灰度转化 temp3 = new Grayscale(0.2125, 0.7154, 0.0721).Apply(temp5); //pictureBox3灰度转化 //pictureBox3.Image = temp3; //从temp3进行二值化 temp4 = new Threshold(10).Apply(temp3); //pictureBox4是二值化后的图 //pictureBox4.Image = temp4; //temp7去噪点后的图 temp7 = new BlobsFiltering(40, 40, temp4.Width, temp4.Height).Apply(temp4); //pictureBox7.Image = temp7; //temp6先原图格式化复制 temp6 = AForge.Imaging.Image.Clone(temp7, temp1.PixelFormat); temp8 = temp6; try { QuadrilateralFinder qf = new QuadrilateralFinder();//获取三角形、四边形角点 List <IntPoint> corners = qf.ProcessImage(temp6); //进行角点转换 corners = CornersChange(corners, temp6.Size.Width, temp6.Size.Height); //生成四角变换过滤器 QuadrilateralTransformation filter2 = new QuadrilateralTransformation(corners, 1920, 1040); //对原图temp1进行四角型变换 temp8 = filter2.Apply(temp1); } catch { } //temp9为temp8的复制 temp9 = AForge.Imaging.Image.Clone(temp8, temp1.PixelFormat); //pictureBox8.Image = temp8; //生成一个新的过滤器 ColorFiltering colorFilter2 = new ColorFiltering(); colorFilter2.Red = new IntRange(100, 255); colorFilter2.Green = new IntRange(100, 255); colorFilter2.Blue = new IntRange(0, 90); //提取颜色 temp5 = colorFilter2.Apply(temp9); //灰度转化 temp3 = new Grayscale(0.2125, 0.7154, 0.0721).Apply(temp5); //二值化 temp4 = new Threshold(10).Apply(temp3); //去噪点 temp7 = new BlobsFiltering(40, 40, temp4.Width, temp4.Height).Apply(temp4); temp6 = AForge.Imaging.Image.Clone(temp7, temp9.PixelFormat); temp10 = AForge.Imaging.Image.Clone(temp6, temp6.PixelFormat); pictureBox8.Image = temp10; try { QuadrilateralFinder qf = new QuadrilateralFinder();//获取三角形、四边形角点 List <IntPoint> corners = qf.ProcessImage(temp6); corners = CornersChange(corners, temp6.Size.Width, temp6.Size.Height); Rectangle rect = new Rectangle(); rect = Screen.GetWorkingArea(this); string path = OriPath + "\\SourceInputImage.jpg"; Bitmap bt = new Bitmap(path); //初始化一个和屏幕面积一样大小的bitmap且格式和bt一样 DisplayBitmap = new Bitmap(rect.Width, rect.Height, bt.PixelFormat); Graphics g = Graphics.FromImage(DisplayBitmap); g.FillRectangle(Brushes.White, new Rectangle(0, 0, rect.Width, rect.Height));//这句实现填充矩形的功能 AForge.Imaging.Filters.BackwardQuadrilateralTransformation Bfilter = new AForge.Imaging.Filters.BackwardQuadrilateralTransformation(bt, corners); temp10 = Bfilter.Apply(DisplayBitmap); //string testsavepath = OriPath + "\\SourcePic.bmp"; //DisplayBitmap.Save(testsavepath); /* * BitmapData data = temp6.LockBits(new Rectangle(0, 0, temp6.Width, temp6.Height), * ImageLockMode.ReadWrite, temp6.PixelFormat); * Drawing.Polygon(data, corners, Color.Red); * for (int i = 0; i < corners.Count; i++) * { * Drawing.FillRectangle(data, * new Rectangle(corners[i].X - 2, corners[i].Y - 2, 10, 10), * Color.Red); * } * * temp6.UnlockBits(data); */ } catch { } pictureBox9.Image = temp10; }
private async Task CalibThread(FrameReadyEventArgs e) { Debug.WriteLine("Calibrating " + _calibrationStep + " " + _drawing); e.Frame.Bitmap.Save(@"C:\temp\daforge\src\img" + (_calibrationStep < 10?"0":"") + _calibrationStep + "-" + (_drawing?"1":"0") + "-" + _errors + ".jpg", ImageFormat.Jpeg); if (_errors > 100) { //calibration not possible return; } if (_calibrationStep == CalibrationFrames && !_drawing) { _cc.FrameReady -= BaseCalibration; // TODO //Grid.Calculate(); _vs.Close(); CalibrationCompleted(this, new EventArgs()); } else { if (_calibrationStep > 2) { if (_drawing) { // draw diffimage _drawing = false; _vs.Clear(); FillRects(); diffFilter.OverlayImage = e.Frame.Bitmap; } else { // analyse diffimage _calibrationStep++; _drawing = true; _vs.Clear(); FillRects(); _calibrationStep--; var gbm = diffFilter.Apply(e.Frame.Bitmap); gbm.Save(@"C:\temp\daforge\diff\img" + _calibrationStep + ".jpg", ImageFormat.Jpeg); #if DEBUG actImg = (Bitmap)gbm.Clone(); #endif var d = UnmanagedImage.FromManagedImage(gbm); var stats = new ImageStatistics(d); var gcf = new ColorFiltering(new IntRange(0, 255), new IntRange((int)(stats.GreenWithoutBlack.Mean + stats.GreenWithoutBlack.StdDev + 5), 255), new IntRange(0, 255)); var bcf = new ColorFiltering(new IntRange(0, 255), new IntRange(0, 255), new IntRange((int)(stats.BlueWithoutBlack.Mean + stats.BlueWithoutBlack.StdDev), 255)); //Debug.WriteLine("Green: " + stats.GreenWithoutBlack.Median + " Blue: " + stats.BlueWithoutBlack.Median); //Debug.WriteLine("Green: " + stats.GreenWithoutBlack.Mean + " Blue: " + stats.BlueWithoutBlack.Mean); var bf = new Difference(gcf.Apply(d)); bcf.ApplyInPlace(d); bf.ApplyInPlace(d); d.ToManagedImage().Save(@"C:\temp\daforge\diff\img" + _calibrationStep + ".jpg", ImageFormat.Jpeg); stats = new ImageStatistics(d); gcf = new ColorFiltering(new IntRange(0, 255), new IntRange((int)stats.GreenWithoutBlack.Mean, 255), new IntRange(0, 255)); bcf = new ColorFiltering(new IntRange(0, 255), new IntRange(0, 255), new IntRange((int)stats.BlueWithoutBlack.Mean, 255)); // split channels var bbm = bcf.Apply(d); bbm.ToManagedImage().Save(@"C:\temp\daforge\bimg\img" + _calibrationStep + ".jpg", ImageFormat.Bmp); gcf.ApplyInPlace(d); d.ToManagedImage().Save(@"C:\temp\daforge\gimg\img" + _calibrationStep + ".jpg", ImageFormat.Bmp); var gblobCounter = new BlobCounter { ObjectsOrder = ObjectsOrder.YX, MaxHeight = 60, MinHeight = 15, MaxWidth = 60, MinWidth = 15, FilterBlobs = true, CoupledSizeFiltering = false }; gblobCounter.ProcessImage(d); var bblobCounter = new BlobCounter { ObjectsOrder = ObjectsOrder.YX, MaxHeight = 60, MinHeight = 15, MaxWidth = 60, MinWidth = 15, FilterBlobs = true, CoupledSizeFiltering = false }; bblobCounter.ProcessImage(bbm); ProcessBlobs(gblobCounter, 0); ProcessBlobs(bblobCounter, 1); #if DEBUG actImg.Save(@"C:\temp\daforge\squares\img" + _calibrationStep + ".jpg", ImageFormat.Jpeg); #endif _calibrationStep++; } } else { switch (_calibrationStep) { case 2: var bm = UnmanagedImage.FromManagedImage(e.Frame.Bitmap); //diffFilter.OverlayImage.Save(@"C:\temp\daforge\diff\src" + _errors + ".jpg", ImageFormat.Jpeg); bm = diffFilter.Apply(bm); var gf = new GaussianBlur(9.0, 3); gf.ApplyInPlace(bm); var cf = new ColorFiltering(new IntRange(10, 255), new IntRange(20, 255), new IntRange(20, 255)); cf.ApplyInPlace(bm); var blobCounter = new BlobCounter { ObjectsOrder = ObjectsOrder.Size, BackgroundThreshold = Color.FromArgb(255, 15, 20, 20), FilterBlobs = true }; blobCounter.ProcessImage(bm); bm.ToManagedImage().Save(@"C:\temp\daforge\diff\img" + _calibrationStep + "-" + _errors + ".jpg", ImageFormat.Jpeg); var blobs = blobCounter.GetObjectsInformation(); if (blobs.Any()) { int i = 0; List <IntPoint> corners; do { corners = PointsCloud.FindQuadrilateralCorners(blobCounter.GetBlobsEdgePoints(blobs[i++])); } while (corners.Count != 4); RecursiveAForgeCalibrator.GridBlobs.InPlaceSort(corners); Grid.TopLeft = new Point(corners[0].X, corners[0].Y); Grid.TopRight = new Point(corners[1].X, corners[1].Y); Grid.BottomLeft = new Point(corners[2].X, corners[2].Y); Grid.BottomRight = new Point(corners[3].X, corners[3].Y); if (Grid.TopLeft.X > 10 && Grid.TopRight.X < _vs.Width - 5 && Grid.BottomLeft.X > 5 && Grid.BottomRight.X < _vs.Width - 5 && Grid.TopLeft.Y > 10 && Grid.TopRight.Y > 5 && Grid.BottomLeft.Y < _vs.Height - 5 && Grid.BottomRight.Y < _vs.Height - 5 && Grid.TopLeft.X < Grid.BottomRight.X && blobs[i - 1].Area > 60000 && Grid.BottomLeft.X < Grid.TopRight.X && Grid.BottomLeft.X < Grid.BottomRight.X && Grid.TopLeft.Y < Grid.BottomLeft.Y && Grid.TopLeft.Y < Grid.BottomRight.Y && Grid.TopRight.Y < Grid.BottomLeft.Y && Grid.TopRight.Y < Grid.BottomRight.Y) { _calibrationStep++; _drawing = true; _vs.Clear(); FillRects(); Grid.AddPoint(new Point(), new Point(corners[0].X, corners[0].Y)); Grid.AddPoint(new Point(0, _vs.Height), new Point(corners[1].X, corners[1].Y)); Grid.AddPoint(new Point(_vs.Width, 0), new Point(corners[2].X, corners[2].Y)); Grid.AddPoint(new Point(_vs.Width, _vs.Height), new Point(corners[3].X, corners[3].Y)); //_mapper.PredictFromCorners(); } else { _calibrationStep = 0; _errors++; } } else { _calibrationStep = 0; _errors++; _vs.Draw(); } break; case 1: diffFilter.OverlayImage = e.Frame.Bitmap; //diffFilter.OverlayImage.Save(@"C:\temp\daforge\diff\srcf" + _errors + ".jpg", ImageFormat.Jpeg); //_vs.AddRect(0, 0, (int) _vs.Width, (int) _vs.Height, Color.FromArgb(255, 255, 255, 255)); _vs.Clear(); for (int y = 0; y < Columncount; y++) { for (int x = 0; x < Rowcount; x++) { if (!(y % 2 == 0 && x % 2 == 0 || y % 2 == 1 && x % 2 == 1)) { _vs.AddRect((int)(x * _sqrwidth), (int)(y * _sqrheight), (int)_sqrwidth, (int)_sqrheight, Color.FromArgb(255, 255, 255, 255)); } } } _vs.Draw(); _calibrationStep++; break; case 0: Grid = new Grid(e.Frame.Bitmap.Width, e.Frame.Bitmap.Height); Grid.ScreenSize = new Rectangle(0, 0, _vs.Width, _vs.Height); _mapper = new CornerBarycentricMapper(Grid); var thread = new Thread(() => { _vs.Show(); _vs.AddRect(0, 0, _vs.Width, _vs.Height, Color.FromArgb(255, 0, 0, 0)); }); thread.SetApartmentState(ApartmentState.STA); thread.Start(); thread.Join(); for (int y = 0; y < Columncount; y++) { for (int x = 0; x < Rowcount; x++) { if (y % 2 == 0 && x % 2 == 0 || y % 2 == 1 && x % 2 == 1) { _vs.AddRect((int)(x * _sqrwidth), (int)(y * _sqrheight), (int)_sqrwidth, (int)_sqrheight, Color.FromArgb(255, 255, 255, 255)); } } } _vs.Draw(); _calibrationStep++; break; } } } Debug.WriteLine("Releasing"); await Task.Delay(500); _sem.Release(); }
static void OnNewGameState(GameState gs) { try { bool DEBUGING = true; if (gs.Map.GameState == DOTA_GameState.Undefined) { return; } if (gs.Previously.Map.GameState == GS_WAITING && gs.Map.GameState == GS_DRAFTING) { var client = new HGV.Basilius.MetaClient(); var heroKeys = client.GetADHeroes().ToDictionary(_ => _.Key, _ => _.Id); Console.WriteLine("Drafting"); Console.WriteLine("Hero {0}:{1}", gs.Hero.ID, gs.Hero.Name); Thread.Sleep(4000); // Wait for ability draft screen to load. var captureImage = ScreenCapture.CaptureApplication(); if (DEBUGING == true) { captureImage.Save(".//output//capture.png"); } Bitmap overlay; Bitmap source; { // create filter var colorFiltering = new ColorFiltering(); // set channels' ranges to keep colorFiltering.Red = new IntRange(50, 52); colorFiltering.Green = new IntRange(50, 52); colorFiltering.Blue = new IntRange(50, 52); // apply the filter var image = colorFiltering.Apply(captureImage); var gfilter = Grayscale.CommonAlgorithms.BT709; source = gfilter.Apply(image); } { // create filter var colorFiltering = new ColorFiltering(); // set channels' ranges to keep colorFiltering.Red = new IntRange(194, 204); colorFiltering.Green = new IntRange(211, 221); colorFiltering.Blue = new IntRange(165, 170); // apply the filter var image = colorFiltering.Apply(captureImage); var gfilter = Grayscale.CommonAlgorithms.BT709; overlay = gfilter.Apply(image); } // create filter var mergeFilter = new Merge(overlay); var resultImage = mergeFilter.Apply(source); if (DEBUGING == true) { resultImage.Save("./output/bounds.png"); } var shapeChecker = new SimpleShapeChecker(); var bc = new BlobCounter(); bc.FilterBlobs = true; bc.MinHeight = 5; bc.MinWidth = 5; bc.ProcessImage(resultImage); var blobs = bc.GetObjectsInformation(); var size = new Size(); var left = 0; var top = 0; var right = 0; var height = 0; foreach (var blob in blobs) { var points = bc.GetBlobsEdgePoints(blob); if (shapeChecker.IsCircle(points)) { right = blob.Rectangle.Left; } else if (shapeChecker.IsQuadrilateral(points)) { left = blob.Rectangle.Right; top = blob.Rectangle.Top; height = blob.Rectangle.Height; const double HERO_RATIO = 0.76; size.Width = (int)Math.Round(height * HERO_RATIO); size.Height = height; } } var bounds = new Rectangle(left, top, right - left, height); var spacing = (bounds.Width - (size.Width * 10)) / 11; bounds.X += spacing; bounds.Width -= (spacing * 2); if (DEBUGING == true) { Crop filter = new Crop(bounds); var imageHeader = filter.Apply(captureImage); imageHeader.Save("./output/header.png"); } var collection = new List <Bitmap>(); for (int i = 0; i < 10; i++) { var x = (spacing * i) + (size.Width * i) + bounds.X; Crop cropFilter = new Crop(new Rectangle(x, bounds.Y, size.Width, size.Height)); var cropedImage = cropFilter.Apply(captureImage); collection.Add(cropedImage); if (DEBUGING == true) { cropedImage.Save($"./output/hero[{i}].png"); } } var templates = new List <TemplatePackage>(); var resizeFilter = new ResizeBicubic(size.Width, size.Height); var files = Directory.GetFiles(".//heroes"); foreach (var file in files) { var key = Path.GetFileNameWithoutExtension(file); var heroId = 0; heroKeys.TryGetValue(key, out heroId); var template = Bitmap.FromFile(file) as Bitmap; var resizedTemplate = resizeFilter.Apply(template); var package = new TemplatePackage() { Key = key, Hero = heroId, Image = resizedTemplate, }; templates.Add(package); } var tm = new ExhaustiveTemplateMatching(0.8f); var data = new List <DataPackage>(); for (int i = 0; i < collection.Count; i++) { var image = collection[i]; foreach (var template in templates) { var matchings = tm.ProcessImage(image, template.Image); foreach (var match in matchings) { var package = new DataPackage() { Similarity = match.Similarity, Bounds = match.Rectangle, Key = template.Key, Hero = template.Hero, Index = i, }; data.Add(package); } } } var heroes = new List <int>(); var groups = data.GroupBy(_ => _.Index).OrderBy(_ => _.Key).ToList(); foreach (var group in groups) { var item = group.OrderByDescending(_ => _.Similarity).Take(1).FirstOrDefault(); heroes.Add(item.Hero); if (DEBUGING == true) { Console.WriteLine("{0}:{1} ({2})", item.Hero, item.Key, item.Similarity); } } Console.WriteLine("Launching Drafter"); var roster = string.Join(",", heroes.ToArray()); Process.Start("https://hgv-desolator.azurewebsites.net/#/draft?roster=" + roster); Console.WriteLine(""); } } catch (Exception ex) { Console.WriteLine("Error"); // Next Time Gadget. NEXT TIME! } }
void SensorFrameReady(AllFramesReadyEventArgs e) { // if the window is displayed, show the depth buffer image Bitmap mask = null; using (DepthImageFrame frame = e.OpenDepthImageFrame()) { if (frame != null) { _depthBitmap = CreateBitMapFromDepthFrame(frame); ColorFiltering filter = new ColorFiltering(); filter.Red = new IntRange(50, 150); filter.Green = new IntRange(200, 255); filter.Blue = new IntRange(150, 255); // apply the filter _depthBitmap = AForge.Imaging.Image.Clone(_depthBitmap, System.Drawing.Imaging.PixelFormat.Format24bppRgb); mask = filter.Apply(_depthBitmap); Grayscale gray = new Grayscale(0.7, 0.3, 0.1); mask = gray.Apply(mask); Threshold threshold = new Threshold(100); threshold.ApplyInPlace(mask); Invert invert = new Invert(); invert.ApplyInPlace(mask); } } using (ColorImageFrame frame = e.OpenColorImageFrame()) { if (frame != null) { _bitmap = _drawBitmap = ImageToBitmap(frame); if (mask != null) { ApplyMask subtract = new ApplyMask(mask); _bitmap = subtract.Apply(_bitmap); } HSLFiltering hsl = new HSLFiltering(new IntRange(330, 30), new Range(0.5f, 1), new Range(0.1f, 1)); hsl.ApplyInPlace(_bitmap); Grayscale gray = new Grayscale(1, 0.8, 0.8); _bitmap = gray.Apply(_bitmap); Mean meanFilter = new Mean(); meanFilter.ApplyInPlace(_bitmap); BlobsFiltering blob = new BlobsFiltering(); blob.CoupledSizeFiltering = false; blob.MinHeight = 15; blob.MinWidth = blob.MinHeight; blob.MaxHeight = blob.MaxWidth = 300; blob.ApplyInPlace(_bitmap); // locate objects using blob counter BlobCounter blobCounter = new BlobCounter(); blobCounter.ProcessImage(_bitmap); Blob[] blobs = blobCounter.GetObjectsInformation(); Pen redPen = new Pen(Color.Red, 2); Pen greenPen = new Pen(Color.Green, 2); Pen purplePen = new Pen(Color.OrangeRed, 3); Pen pen; // check each object and draw circle around objects, which // are recognized as circles int maxBlob = -1; double maxFullness = -1; for (int i = 0, n = blobs.Length; i < n; i++) { float hw_ratio = (float)(blobs[i].Rectangle.Height) / blobs[i].Rectangle.Width; if (hw_ratio > 0.65 && hw_ratio < 1.5 && blobs[i].Area > 200 && blobs[i].Fullness > 0.35) { if (blobs[i].Area > maxFullness) { maxBlob = i; maxFullness = blobs[i].Area; } } } System.Console.WriteLine("MAX BLOB: " + maxBlob.ToString()); //draw to screen! Grayscale gray2 = new Grayscale(0.2125, 0.7154, 0.072); _drawBitmap = gray2.Apply(_drawBitmap); _drawBitmap = AForge.Imaging.Image.Clone(_drawBitmap, System.Drawing.Imaging.PixelFormat.Format24bppRgb); Graphics g = Graphics.FromImage(_drawBitmap); AForge.Point ballPos = new AForge.Point(-1, -1); if (maxBlob >= 0) { ballPos = blobs[maxBlob].CenterOfGravity; } game.DrawGridAndScore(g, ballPos); for (int i = 0, n = blobs.Length; i < n; i++) { float hw_ratio = (float)(blobs[i].Rectangle.Height) / blobs[i].Rectangle.Width; if (hw_ratio > 0.65 && hw_ratio < 1.5 && blobs[i].Area > 200 && blobs[i].Fullness > 0.35) { AForge.Point center = blobs[i].CenterOfGravity; if (maxBlob == i) { pen = purplePen; } else if (blobs[i].Fullness > 0.35) { continue;//pen = greenPen; } else { continue;// pen = redPen; } float radius = blobs[i].Rectangle.Width / 2; g.DrawEllipse(pen, (int)(center.X - radius), (int)(center.Y - radius), (int)(radius * 2), (int)(radius * 2)); //g.DrawString(hw_ratio.ToString(), new Font("Arial", 16), new SolidBrush(Color.Yellow), // new System.Drawing.Point((int)center.X, (int)center.Y)); } } redPen.Dispose(); greenPen.Dispose(); purplePen.Dispose(); g.Dispose(); if (game.hasWon) { if (player == game.winningPlayer) { label1.Text = "You Won!!! Congrats :)"; } else { label1.Text = "You Lost... :("; } } this.Refresh(); } } }
private void vspMain_NewFrame(object sender, ref Bitmap image) { cntFrame++; if (cntFrame < 80) { return; } colorFiltering.Red = new Accord.IntRange(230, 245); colorFiltering.Green = new Accord.IntRange(200, 220); colorFiltering.Blue = new Accord.IntRange(150, 180); var filteringFrame = colorFiltering.Apply(image); var afterGray = grayscaleBT709.Apply(filteringFrame); var thersholdedFrame = threshold.Apply(afterGray); pbThreshold.Image = afterGray; var dilatedFrame = dilation.Apply(thersholdedFrame); ApplyMask applyMask = new ApplyMask(dilatedFrame); var maskedFrame = applyMask.Apply(image); var blobFrame = maskedFrame.Clone() as Bitmap; pbMasked.Image = maskedFrame; blobCounter.ProcessImage(blobFrame); var info = blobCounter.GetObjectsInformation(); var rectangles = info.Where(w => w.Area >= 200).Select(s => s.Rectangle).ToList(); //var rectangles = blobCounter.GetObjectsRectangles(); if (rectangles.Count == 0) { missFrame++; return; } var rectangle = rectangles[0]; lstHeight.Add(rectangle.Y); if (lstHeight.Count >= 2) { lstHeight.Remove(0); } //if(cntFrame >=130) // lastRect = rectangle; //rectangle = rectangles.Where(w => Math.Abs(lastRect.X - w.X) < 20).FirstOrDefault(); if (rectangle == null) { return; } Graphics g = Graphics.FromImage(image); rectangle.Width = 50; rectangle.Height = 100; //rectangle.Y = lstHeight.Sum(s => s) / lstHeight.Count; g.DrawRectangle(new Pen(Color.Yellow, 3), rectangle); var img = UnmanagedImage.FromManagedImage(blobFrame); camshift.SearchWindow = rectangle; camshift.ProcessFrame(img); var trackRect = camshift.TrackingObject.Rectangle; if (trackRect == null) { return; } trackRect.Inflate(30, 30); g.DrawRectangle(new Pen(Color.Aqua, 3), trackRect); }
/// <summary> /// Find all traffic signs in the specified bitmap. /// </summary> /// <param name="bitmap">The bitmap in which to search for traffic signs</param> /// <returns>A Rectangle[] array of found traffic signs</returns> private Rectangle[] FindTrafficSigns(Bitmap bitmap) { // set up a color filter for 'traffic sign yellow' var yellowFilter = new ColorFiltering( new IntRange(127, 255), new IntRange(127, 255), new IntRange(0, 127)); // filter the frame so only yellow remains var yellowFrame = yellowFilter.Apply(bitmap); // convert the image to grayscale var grayFrame = Grayscale.CommonAlgorithms.BT709.Apply(yellowFrame); // use a sobel edge detector to find color edges var edgeDetector = new SobelEdgeDetector(); var edgeFrame = edgeDetector.Apply(grayFrame); // threshold the edges var thresholdConverter = new Threshold(200); thresholdConverter.ApplyInPlace(edgeFrame); // show the thresholded image in the pip window edgeBox.Image = (Bitmap)edgeFrame.Clone(); // use a blobcounter to find all shapes var detector = new BlobCounter() { FilterBlobs = true, CoupledSizeFiltering = true, MinWidth = 10, MinHeight = 10, MaxWidth = 200, MaxHeight = 150, }; detector.ProcessImage(edgeFrame); var blobs = detector.GetObjectsInformation(); // we're going to look for signs above the road and in the right curb, // so let's set up two search areas var searchArea1 = new Rectangle( (int)(edgeFrame.Width * 0.3), (int)(edgeFrame.Height * 0.1), (int)(edgeFrame.Width * 0.5), (int)(edgeFrame.Height * 0.54)); var searchArea2 = new Rectangle( (int)(edgeFrame.Width * 0.6), (int)(edgeFrame.Height * 0.5), (int)(edgeFrame.Width * 0.4), (int)(edgeFrame.Height * 0.14)); // let's draw the search areas into the main window // for easy reference DrawRectangles(new[] { searchArea1, searchArea2 }, bitmap, Color.Red); // look for signs in both search areas var candidates = from shape in blobs where searchArea1.Contains(shape.Rectangle) || searchArea2.Contains(shape.Rectangle) select shape; // build a list of all matches return((from shape in candidates select shape.Rectangle).ToArray()); }
public void picshow() { Bitmap temp1; Bitmap temp2; Bitmap temp3; Bitmap temp4; Bitmap temp5; Bitmap temp7; Bitmap temp8; Bitmap temp9; Bitmap sourceImage; //新建轮廓过滤器 CannyEdgeDetector filter = new CannyEdgeDetector(); //生成颜色过滤器 ColorFiltering colorFilter = new ColorFiltering(); //白色 colorFilter.Red = new IntRange(50, 255); colorFilter.Green = new IntRange(50, 255); colorFilter.Blue = new IntRange(50, 255); //从摄像头中截取图像 sourceImage = videoSourcePlayer1.GetCurrentVideoFrame(); //将原图格式化复制 temp1 = AForge.Imaging.Image.Clone(sourceImage, sourceImage.PixelFormat); sourceImage.Dispose(); sourceImage = temp1; int Height = sourceImage.Size.Height; int Width = sourceImage.Size.Width; //pictureBox1是原图 pictureBox1.Image = temp1; //pictureBox2原图轮廓 temp2 = filter.Apply(sourceImage.PixelFormat != PixelFormat.Format8bppIndexed ? Grayscale.CommonAlgorithms.BT709.Apply(sourceImage) : sourceImage); pictureBox2.Image = temp2; //pictureBox5提取颜色后的图 temp5 = colorFilter.Apply(temp1); pictureBox5.Image = temp5; //pictureBox3灰度转化后的图 temp3 = new Grayscale(0.2125, 0.7154, 0.0721).Apply(temp5); pictureBox3.Image = temp3; //pictureBox4二值化后的图 temp4 = new Threshold(10).Apply(temp3); pictureBox4.Image = temp4; //pictureBox7去噪点后的图 temp7 = new BlobsFiltering(40, 40, temp4.Width, temp4.Height).Apply(temp4); pictureBox7.Image = temp7; Bitmap temp6 = AForge.Imaging.Image.Clone(temp7, temp1.PixelFormat); temp8 = temp6; try { QuadrilateralFinder qf = new QuadrilateralFinder();//获取三角形、四边形角点 List <IntPoint> corners = qf.ProcessImage(temp6); /* * BlobCounter extractor = new BlobCounter(); * extractor.FilterBlobs = true; * extractor.MinWidth = extractor.MinHeight = 150; * extractor.MaxWidth = extractor.MaxHeight = 350; * extractor.ProcessImage(temp6); * * foreach (Blob blob in extractor.GetObjectsInformation()) * { * // 获取边缘点 * List<IntPoint> edgePoints = extractor.GetBlobsEdgePoints(blob); * // 利用边缘点,在原始图像上找到四角 * corners = PointsCloud.FindQuadrilateralCorners(edgePoints); * } */ corners = CornersChange(corners, temp6.Size.Width, temp6.Size.Height); QuadrilateralTransformation filter2 = new QuadrilateralTransformation(corners, 384, 216); temp8 = filter2.Apply(temp1); } catch { } //pictureBox8原图中的投影经过四边形转换后的图 temp9 = AForge.Imaging.Image.Clone(temp8, temp1.PixelFormat); pictureBox8.Image = temp8; //亮黄 ColorFiltering colorFilter2 = new ColorFiltering(); colorFilter2.Red = new IntRange(100, 255); colorFilter2.Green = new IntRange(100, 255); colorFilter2.Blue = new IntRange(0, 90); //提取颜色 temp5 = colorFilter2.Apply(temp9); pictureBox5.Image = temp5; //灰度转化 temp3 = new Grayscale(0.2125, 0.7154, 0.0721).Apply(temp5); pictureBox3.Image = temp3; //二值化 temp4 = new Threshold(10).Apply(temp3); //去噪点 temp7 = new BlobsFiltering(40, 40, temp4.Width, temp4.Height).Apply(temp4); temp6 = AForge.Imaging.Image.Clone(temp7, temp9.PixelFormat); temp9 = temp6; try { QuadrilateralFinder qf = new QuadrilateralFinder();//获取三角形、四边形角点 List <IntPoint> corners = qf.ProcessImage(temp6); corners = CornersChange(corners, temp6.Size.Width, temp6.Size.Height); QuadrilateralTransformation filter2 = new QuadrilateralTransformation(corners, 384, 216); BitmapData data = temp6.LockBits(new Rectangle(0, 0, temp6.Width, temp6.Height), ImageLockMode.ReadWrite, temp6.PixelFormat); Drawing.Polygon(data, corners, Color.Red); for (int i = 0; i < corners.Count; i++) { Drawing.FillRectangle(data, new Rectangle(corners[i].X - 2, corners[i].Y - 2, 10, 10), Color.Red); } float juli = (corners[0].Y + corners[3].Y - corners[1].Y - corners[2].Y) / 2; label1.Text = ((int)((400 - juli) / 7.5)).ToString(); temp6.UnlockBits(data); } catch { } pictureBox9.Image = temp9; }