2014-12-06 2 views
0

«Я пытаюсь обнаружить canny edge на изображении, и он был успешным, но я не знаю, как определить его край, если я хочу его в реальном времени, вот мой код, у него нет ошибок, но canny окно не может быть обработанКак обнаружить канны и интегральную проекцию на веб-камеру реального времени с помощью C# aforge?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
//using KomCit; 
using System.Drawing.Imaging; 
using System.IO; 
using System.Timers; 
using AForge; 
using AForge.Imaging.Filters; 
using AForge.Video.DirectShow; 
using System.Threading; 

namespace canny_video 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
     private FilterInfoCollection CaptureDevice; 
     private VideoCaptureDevice FinalFrame; 

     void FinalFrame_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs) 
     { 
      CameraBox.Image = (Bitmap)eventArgs.Frame.Clone(); 
     } 

     private static Image resizeImage(Image imgToResize, Size size) 
     { 
      return (Image)(new Bitmap(imgToResize, size)); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      //timer1.Enabled = true; 
      CaptureDevice = new FilterInfoCollection(FilterCategory.VideoInputDevice); 
      foreach (FilterInfo Device in CaptureDevice) 
      { 
       listDevice.Items.Add(Device.Name); 

      } 
      listDevice.SelectedIndex = 0; 
      FinalFrame = new VideoCaptureDevice(); 
     } 

     private void start_Click(object sender, EventArgs e) 
     { 
      FinalFrame = new VideoCaptureDevice(CaptureDevice[listDevice.SelectedIndex].MonikerString); 
      FinalFrame.NewFrame += new AForge.Video.NewFrameEventHandler(FinalFrame_NewFrame); 
      FinalFrame.Start(); 
      //CannyBox.Image = (Bitmap)CameraBox.Image.Clone(); //capture image bitmap 
      //Bitmap gambar = new Bitmap(CameraBox.Image); 
      Bitmap gambar = new Bitmap(CameraBox.Image); 
      Grayscale gray = new Grayscale(0.2125, 0.7154, 0.0721); 
      CannyEdgeDetector cany = new CannyEdgeDetector(0, 70); 
      Bitmap hasil = cany.Apply(gray.Apply(gambar)); 
      // BlobsFiltering blob = new BlobsFiltering(0, 0, 20, 20); 
      //Bitmap hasil = blob.Apply(gray.Apply(gambar)); 
      //CannyBox.Width = gambar.Width; 
      //CannyBox.Height = gambar.Height; 
      CannyBox.Image = hasil; 
     } 



     private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
     { 
      if (FinalFrame.IsRunning == true) 
      { 
       FinalFrame.Stop(); 
      } 
     } 
    } 
} 

"

Моя проблема выше решена, спасибо :) , но у меня есть еще одна проблема на интегральной проекции, я не знаю, как это сделать, хотя. пожалуйста, помогите, спасибо заранее

ответ

0

Некоторые комментарии:

  • Ваши две частные переменные очень смутно названы. Ваш CaptureDevice представляет собой набор всех устройств захвата на компьютере, а ваш FinalFrame - это устройство захвата.
  • Вы не ищите каменные края на растровом изображении при приеме.
  • Обработчик событий NewFrame работает в потоковой потоке, поэтому вы должны использовать .BeginInvoke, чтобы сделать его пригодным для использования в потоке пользовательского интерфейса.

Что вы можете сделать:

  • Внутри _NewFrame обработчика использовать BeginInvoke для передачи клонированного изображения к способу ProcessCameraImage (что значит работать в потоке пользовательского интерфейса).
  • Применить обнаружение крошечного края в этом методе.
  • Затем присвойте результат вашему изображению.

Примечание: Я не знаю, как обнаружено определение тяжелого тяжелого края процессора. Если это дорого, выполнение этого в потоке пользовательского интерфейса может блокировать взаимодействие пользователя. В этом случае вы можете сделать это в потоковом потоке и перенести только обработанное изображение для отображения. Но в зависимости от времени, которое это требует, это может заставить камеру снизить частоту кадров.

+0

Благодарим вас за ответ, да, это задержка около 5 секунд, чтобы сделать обнаружение, не могли бы вы рассказать мне, как уменьшить задержку? его беспокоит меня – Devi

0

спасибо за ваш ответ, было решено только сейчас, я изменил его, и он каким-то образом решить

вот код:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using AForge; 
using AForge.Imaging; 
using AForge.Imaging.Filters; 
using AForge.Video; 
using AForge.Video.DirectShow; 
using System.Drawing.Imaging;  //Save P2 
using System.IO;     //Save P2 

namespace AForgeCamera 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 


     Bitmap video; 

     private FilterInfoCollection CaptureDevice; 
     private VideoCaptureDevice FinalFrame; 
     int mode; 



     private void Form1_Load(object sender, EventArgs e) 
     { 
      CaptureDevice = new FilterInfoCollection(FilterCategory.VideoInputDevice); 
      foreach (FilterInfo Device in CaptureDevice) 
      { 
       comboBox1.Items.Add(Device.Name); 
      } 
      comboBox1.SelectedIndex = 0; 
      FinalFrame = new VideoCaptureDevice(); 
     } 

     private void button1_Click(object sender, EventArgs e)  //Tombol Start 
     { 
      FinalFrame = new VideoCaptureDevice(CaptureDevice[comboBox1.SelectedIndex].MonikerString); 
      FinalFrame.NewFrame += new NewFrameEventHandler(FinalFrame_NewFrame); 
      FinalFrame.Start(); 
     } 
     void FinalFrame_NewFrame(object sender, NewFrameEventArgs eventArgs) 
     { 
      video = (Bitmap)eventArgs.Frame.Clone(); 
      Bitmap video2 = (Bitmap)eventArgs.Frame.Clone(); 
      if (mode==1) 
      { 
       Grayscale gray = new Grayscale(0.2125, 0.7154, 0.0721); 
       Bitmap video3 = gray.Apply(video2); 
       CannyEdgeDetector canny = new CannyEdgeDetector(0, 70); 
       canny.ApplyInPlace(video3); 
       pictureBox2.Image = video3; 
      } 
      pictureBox1.Image = video; 
     } 

     private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
     { 
      if (FinalFrame.IsRunning == true) 
      { 
       FinalFrame.Stop(); 
      } 
     } 

     private void btnTrackingObject_Click(object sender, EventArgs e) 
     { 
      mode = 1; 
     } 


    } 
} 

, но сейчас я работаю над следующим проблема, я пытаюсь определить местоположение объекта с помощью интегральной проекции, можно ли использовать его для этого?

 Смежные вопросы

  • Нет связанных вопросов^_^