C# ile Renkli Nesne Takibi – Color Tracking

Hemen konuyu anlatayım.
Bu Projede daha önce kullanmış olduğum WebCam düzeneğin’den aldığım Görüntüyü Filtreleyerek
İstediğim Renkli bir Nesneyi takip edebiliyorum.
Bu işlemi C# ile yaptım.
C#’da bu işlem için http://www.aforgenet.com sitesinden aldığım Aforge kütüphanesinden yararlandım.
Öncelikle Projeme reference ettigim dll dosaylarını göstereyim.Yukarda verdiğim adresden indirebilirsiniz hepsini.

C# ile yazmış olduğum Proğram:

 

C# Kaynak Kodları:

using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Windows.Forms;

//Aforge ile Uzaylar
 using AForge;
 using AForge.Imaging.Filters;
 using AForge.Imaging;
 using AForge.Video;
 using AForge.Video.DirectShow;
 using AForge.Vision;
 using AForge.Vision.Motion;

namespace Aforge_Color_Tracking
 {
 public partial class Form1 : Form
 {

//Siniflarin nesneleri tanimlaniyor
 private VideoCaptureDevice FinalVideoSource;
 private FilterInfoCollection VideoCaptuerDevices;

public Form1()
 {
 InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)
 {
 //Sisteme bagli olan Cam listesini aliyoruz
 VideoCaptuerDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);

foreach (FilterInfo VideoCaptureDevice in VideoCaptuerDevices)
 {
 comboBox1.Items.Add(VideoCaptureDevice.Name); // WebCamlarin hepsi ComboBox'da listeleniyor
 comboBox1.SelectedIndex = 0; //1.User im Combobox wird markiert.
 }
 }

private void button1_Click(object sender, EventArgs e)
 {

FinalVideoSource = new VideoCaptureDevice(VideoCaptuerDevices[comboBox1.SelectedIndex].MonikerString);//1.User ist gewählt
 FinalVideoSource.NewFrame += new NewFrameEventHandler(FinalVideoSource_NewFrame);
 FinalVideoSource.DesiredFrameRate = 30; // Görüntü kalitesi
 FinalVideoSource.DesiredFrameSize = new Size(320, 240); // Görüntü büyüklügü

FinalVideoSource.Start();
 //timer1.Enabled = true;

}

void FinalVideoSource_NewFrame(object sender, NewFrameEventArgs eventArgs)
 {
 Bitmap image = (Bitmap)eventArgs.Frame.Clone();
 Bitmap image1 = (Bitmap)eventArgs.Frame.Clone();
 pictureBox1.Image = image;

if (radioButton4.Checked)
 {

}

if (radioButton1.Checked)
 {
 //ColorFilter'in yapildigi yer
 ColorFiltering filter = new ColorFiltering();

filter.Red = new IntRange(100, 255);
 filter.Green = new IntRange(0, 75);
 filter.Blue = new IntRange(0, 75);
 filter.ApplyInPlace(image1);

//Görüntü üzerinde algilanan renk kare icine aliniyor
 cevresiniciz(image1);

}

if (radioButton2.Checked)
 {
 // Euclidean Color Filterin yapildigi yer
 EuclideanColorFiltering filter = new EuclideanColorFiltering();
 // Algilanacak renk belirleniyor ve orta noktasi belirleniyor
 filter.CenterColor = new RGB(Color.FromArgb(9, 39, 101));
 filter.Radius = 50;
 // filtre calistiriliyor
 filter.ApplyInPlace(image1);

//Görüntü üzerinde algilanan rengi cevrcevelemek veya hedeflemek icin gerekli Methodlar
 cevresiniciz(image1);
 //hedefal(image);
 }

}

/////////Burdan sonra ekrandaki color etrafina Dikdörtgen cizdiriyoruz/////////////
 public void cevresiniciz(Bitmap image)
 {

BlobCounter blobCounter = new BlobCounter();
 blobCounter.MinWidth = 2;
 blobCounter.MinHeight = 2;
 blobCounter.FilterBlobs = true;
 blobCounter.ObjectsOrder = ObjectsOrder.Size;

Grayscale grayFilter = new Grayscale(0.2125, 0.7154, 0.0721);
 Bitmap grayImage = grayFilter.Apply(image);

blobCounter.ProcessImage(grayImage);
 Rectangle[] rects = blobCounter.GetObjectsRectangles();
 foreach (Rectangle recs in rects)
 {

if (rects.Length > 0)
 {
 Rectangle objectRect = rects[0];
 //Graphics g = Graphics.FromImage(image);
 Graphics g = pictureBox1.CreateGraphics();
 using (Pen pen = new Pen(Color.FromArgb(252, 3, 26), 2))
 {

g.DrawRectangle(pen, objectRect);
 }

//Cizdirilen Dikdörtgenin Koordinatlari aliniyor.
 int objectX = objectRect.X + (objectRect.Width / 2);
 int objectY = objectRect.Y + (objectRect.Height / 2);
 //int objectX = objectRect.X;
 //int objectY = objectRect.Y;
 g.DrawString(objectX.ToString() + "X" + objectY.ToString(), new Font("Arial", 12), Brushes.Red, new System.Drawing.Point(250, 1));
 g.Dispose();

}
 }
 }
 ///////////////////// Buraya kadar //////////////////////////////////////////

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
 {
 //Webcam beim Schließen des Programms wieder freigeben
 if (FinalVideoSource != null && FinalVideoSource.IsRunning)
 {
 FinalVideoSource.SignalToStop();
 FinalVideoSource = null;

}
 }

private void button3_Click(object sender, EventArgs e)
 {
 //Webcam beim Schließen des Programms wieder freigeben
 if (FinalVideoSource != null && FinalVideoSource.IsRunning)
 {
 FinalVideoSource.SignalToStop();
 FinalVideoSource = null;

}
 }

}
 }

 

Yukardaki Kodları derlediğimizde artık WebCam görüntüsü algılaniyor , Filtreleniyor, Renkli nesne etrafı DrawRectangle nesnesi kullanılarak çerçeveleniyor.
Projenin Video görüntüsü:
g

KategorienC#Schlagwörter

28 Antworten auf „C# ile Renkli Nesne Takibi – Color Tracking“

  1. Merhaba dostum. İyi çalışmalar.
    Bir sorum olacaktı.. umng.dll kullanarak geliştirmiş olduğum programlarda winxp altında gayet güzel iletişim kurarken win7 64 bit altında iletişim kuramıyorum. Acaba senin kullandığın win7 32 bit mi 64 bit mi?

  2. Ben Windows7 32 Bit kullaniyorum.
    64 Bit’de deneme yapmadim.Isterseniz Projenin Properties’inde Build kisminda Platform target’ini x64 seklinde derleme yaparak deneyin.

  3. Cevabınız için teşekkür ederim. Fakat „any cpu“ seçeneği ile çalışıyordum zaten. 64 bit seçtim fakat yine tık yok. Sanırım umng.dll 32 bit için yazılmış. Problem ondan kaynaklanıyor.

    1. Evet bende denedim win7 64 bitte calismiyor.
      saniyorum umng.dll 32 bit icin yazilmis sorun ondan kaynaklaniyor.Acaba bu kütüphanin 64 bit icin yazilmisi varmi? bakmak lazim..
      Ben su an icin devamli 32 bit ile calistigimdan fark etmemistim…

  4. Bende buna benzer bir konu ile ilgili çalışıyorum. Bir sorum olacak.Aforge YCbCrFiltering de kullanılan min max deperlerini (
    -0.5f, -0.04f) bu şekil dışında başka bir şekilde girebilirmiyiz. Örneğin (20, 100) gibi.Bu tarz değer yada başka bi şekilde değer verebilirmiyiz? şimdiden teşekkürler

    1. örnegin(20,100) gibi paremetreler kullanmak istiyorsan
      ColorFiltering veya EuclideanColorFiltering kullanin.Bu Filtrelemelerin paremetreleri istediginiz sekilde…

  5. Merhaba Sormak istedigim Bu Projeyi Normal WebCam’lada Calisirmi ? Bu Proje ? Okulda Boyle Bir Proje Gelistirmek istiyorum. Ve Egrem Mumkunse Kaynak Kodlarini gondermeniz Mumkun olurmu ? iyi calismalar.

  6. Arkadaslar Dosyalari herkese göndermem imkansiz.
    Diger örneklerede baktiysaniz herkes Kodlari istiyor, herkese göndermem imkaniz, gönderdigim kisilerde diger arkadaslara gönderirlerse sevinirim.

  7. hocam Siz en iyisi bir Upload sitesine hotfile.com yada baska bir siteye upload edin Linki atin herkez indirsin. Yada benim emaile gonder daha onceki yorumda yazdim Ben Dagitirim arkadaslara. AMa Bana COk Lazim Bu Proje Hocam.

  8. hocam kolay gelsin hareket algılama ile ilgili bir proje üzerinde çalışmaktayım. c# dilinde aforge.net algoritmasını kullanıyorum projenin her şeyini tamamladım yani hareket algılama görüntünün algılanmış olarak ekrana aktarımı tamam fakat ara yüze bir tane buton ve iki tane label koydum bu butono tıkladığım zaman bana kameranın önündeki hareketli nesnenin yönünü versin istiyorum (örnek sağda solda gibi) bu konu hakkında yardımcı olabilirseniz sevinirim..

    1. Sadece görüntüyü mü ekrana aktardin yoksa Colortrackinde yaptiriyormusun?
      Burayi belirtmemissin.
      Eger Colortrackinde yaptiriyorsan o Zaman ekrani ikiye böl,Yani kullandigin ekran boyutu ne ise ona göre ikiye böl.Örnegin ekran genisligi 420 piyel ise yarisini al.
      220 pisel eder.
      Ekranin önündeki cisimin x koordinat pozisyonu 220 den Kücük ise cisim solda, eger 220 pixelden büyük ise sag tarafda diye yönü bulabilirsin!!

  9. hocam kolay gelsin aforge ile hazırlanmış iki tane proje varda acaba bunları birleştirmemiz mümkün mü. projelerden bir tanesi hareketli nesneleri algılıyor diğeride yön tespiti yapıyor ben istiyorumki hem algılama yapsın hemde yön tespiti yapsın yani bu iki proje birleşsin bu mümkünmüdür.

  10. ABİ ÇOK ACİL Bİ PROJE İÇİN LAZIM SEN BU ADRESE: mrt407@hotmail.com dosyaları atabilir misin? Yada dosyaları attığı biri yardım edebilirmi? ARKADAŞLAR ÇOK ACİL LÜTFEN

  11. hocam size çok teşekkür ederim iyiki sizin gibi üreten ürettiklerini karşılıksız paylaşabilen insanlar var.

  12. Öncelikle teşekkürler usta. Anladığım kadarıyla renk kontrolü yapabiliyoruz peki renkli cismin şeklini kontrol edebilirmiyiz?

  13. hocam robot programlamaya nereden baslamalıyım.temel elektrık bılgım var programlama bılgım yok plc mı yoksa programlama dılımı ogrenmelıyım endustrıyel robot teknolojısınde gelıstırmek ıstıyorum kendımı.plc ıle bu mumkunmudegılse robot programlamay nereden baslamalıyım makına muh ogrencısıım sımdıden tesekkurler

  14. Merhabalar Uğur hocam. Çalışmalarınız ile çok yararlı oluyorsunuz, tebrik ederim. Son zamanlarda görüntü işleme çalışmalarına merak salmaya başladım. Zaten google aramalarında siteniz bu alanda ilk sıralarda çıkıyor. Rica etsem bir dosya paylaşım sitesine buradaki proje dosyasını upload edebilir misiniz? Bu sayede yazınız çok daha faydalı hale gelecektir. Teşekkürler ve saygılar.

  15. Merhabalar Uğur Hocam. Değerli bilgi paylaşımlarınız için teşekkür ederim.
    Kaynak kodlarınızı yayınlamanızın büyük katkı sağladığı bir gerçek. Sizden rica etsem proje dosyasını bir dosya upload sitesine yükleyip linkini paylaşabilir misiniz? Bu şekilde proje geliştirmek isteyenler açısından daha faydalı olacaktır. En azından hangi butonun ne iş yaptığı görülüp ona göre proje geliştirilebilir.
    Saygılar.

  16. hocam merhabalar… yakaladığımız objenin boyutunu veya şeklini nasıl öğrenebiliriz ? araştırdım bulamadım sizden cevap veya kaynak bekliyorum teşekkürler iyi çalışmalar…

Kommentare sind geschlossen.