Ana içeriğe atla

C# Görüntü işleme

İlk Olarak Burayı Okumalısınız

Öncelikle görüntü işleme üzerine olan kodları birebir hepsini ben yazmadım bunun için google da “c# color tracking” diye bir arama gerçekleştirdim ve referans olarak http://www.uguryalcin.de/c/372 adresini belirledim.

Konuya geçecek olursak, ilk önce birkaç kütüphane dosyasına ihtiyacınız olacak. örnek projede kütüphaneler mevcut bunlar kendinizi daha da ileri götürmek için. aforge kütüphanesini indirmek isteyebilirsiniz.

Ekran görüntüsü.


Ben aslına bakarsanız kod anlatma konusunda pek iyi değilim. Örnek projeyi indirin. Kodları silin aralarına bir şeyler eklemeye çalışın ve öğrenin. Şimdi yeni bir soru ile daha karşılaşıyoruz. Aynı anda birkaç görüntü almak istersek ne yapmalıyız. Aslında onunda cevabı basit ama biraz da sizin araştırma yapıp kendi blogunuzda yayınlamanız için onu size bırakıyorum. Yayınlamış olduğunuz yazıyı yorumlardan paylaşırsanız çok mutlu olurum.

Sağlıcakla kalın :)


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;
//Güzel Aforge
//////////////
using AForge;
using AForge.Imaging.Filters;
using AForge.Imaging;
using AForge.Video;
using AForge.Video.DirectShow;
using AForge.Vision;
using AForge.Vision.Motion;
namespace GoruntuIsleme2
{
public partial class Form1 : Form
{
private VideoCaptureDevice kameraAygit;
private FilterInfoCollection webcamAygit;
public Form1()
{
InitializeComponent();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (kameraAygit != null && kameraAygit.IsRunning)
{
kameraAygit.SignalToStop();
kameraAygit = null;
}
}
private void Form1_Load(object sender, EventArgs e)
{
webcamAygit = new FilterInfoCollection(FilterCategory.VideoInputDevice);
foreach (FilterInfo VideoCaptureDevice in webcamAygit)
{
comboBox1.Items.Add(VideoCaptureDevice.Name); // WebCamleri listele
comboBox1.SelectedIndex = 0;
}
kameraAygit = new VideoCaptureDevice(webcamAygit[comboBox1.SelectedIndex].MonikerString);//webcam listesinden kafadan birinciyi al diyoruz.
kameraAygit.NewFrame += new NewFrameEventHandler(cam_goruntu_new_frame);
kameraAygit.DesiredFrameRate = 30;//saniyede kaç görüntü alsın istiyorsanız. FPS
kameraAygit.DesiredFrameSize = new Size(320, 240);//görüntü boyutları
kameraAygit.Start();
}
void cam_goruntu_new_frame(object sender, NewFrameEventArgs eventArgs)
{
Bitmap image = (Bitmap)eventArgs.Frame.Clone();
Bitmap image1 = (Bitmap)eventArgs.Frame.Clone();
pictureBox1.Image = image;
ColorFiltering filter = new ColorFiltering();
filter.Red = new IntRange(150, 255);
filter.Green = new IntRange(0, 75);
filter.Blue = new IntRange(0, 75);
filter.ApplyInPlace(image1);
nesnebul(image1);
}
public void nesnebul(Bitmap image)
{
BlobCounter blobCounter = new BlobCounter();
blobCounter.MinWidth = 2;
blobCounter.MinHeight = 2;
blobCounter.FilterBlobs = true;
blobCounter.ObjectsOrder = ObjectsOrder.Size;
Grayscale griFiltre = new Grayscale(0.2125, 0.7154, 0.0721);
Bitmap griImage = griFiltre.Apply(image);
blobCounter.ProcessImage(griImage);
Rectangle[] rects = blobCounter.GetObjectsRectangles();
pictureBox2.Image = griImage;
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);
g.DrawString(objectX.ToString() + "X" + objectY.ToString(), new Font("Arial", 12), Brushes.Red, new System.Drawing.Point(250, 1));
g.Dispose();
}
}
}
}
}

Bence buraya kadar geldiysen  buradasın

Yorumlar

Adsız dedi ki…
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..
Birkan Aydın dedi ki…
Merhaba Arkadaşım, kendi örneğimden yola çıkarak anlatmaya çalışayım. Seçili nesnenin pixel olarak nerede olduğunu bulabiliyorum. sorgulatarak ne tarafta olduğunu tespit edebilirim. Örnek vercek olursak. 500 'e 500 bi görüntüleme alanı olduğunu varsayalım. bu alanı 4 parçaya ayıralım. sagUst, solUst, sagAlt ve solAlt. şimdi bu alanların nereleri olduğunu belirleyelim. ("x" yatay "y" dikey) 0>x>250 ve 0>y>250 ise solUst, 0>x>250 ve 250>y>500 ise solAlt gibi nesnenin konumu 20'ye 270 ise sorgulatarak SolAlt kısımda olduğunu varsayabilirim. Fakat işlemin sağlıklı çalışması için Nesne boyutlarını da hesaba katmak gerecek gibi duruyor. yüzde olarak hangi alanın içerisinde daha fazla ise o alanda olduğunu tahmin edeceğiz. Daha da hassaslaştırmak istersen aynı mantıkla görüntüleme alanını 9 parçaya ayırabilirsin. sağalt, sağorta, sağüst, ortaust,orta,ortaalt,solust,solorta,solalt gibi... Umarım kafanda bir şeyler canlandırabilmişimdir. Çalışmalarında şimdiden başarılar dilerim.
Unknown dedi ki…
Merhabalar birkan bey hazırladığınız proje için saolun. Çok faydalı oldu. Ben bir okulda bilgisayar öğretmeniyim. Görüntü işleme ile ilgili bir proje ile uğraşmaktayım. Sizden bi konuda yardım isteyecektim. Mail adresinizi vermenizde bi sakınca var mı?
Mailim: fatsu_me@mynet.com
Adsız dedi ki…
http://www.blogger.com/profile/03927162780822489003

hocam arkadaş profilinde vermiş mail adresini, sağolsun sorulan sorulara cevap vermeye çalışıyor.
Adsız dedi ki…
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.
Birkan Aydın dedi ki…
Mert Bey, yazılım alanında her şeyin mümkün olduğunu size tüm kalbimle söyleyebilirim. Burada asıl sorulması gereken nasıl yapılması gerektiğidir. Kodları inceleyerek, ya da deneme yanılma yöntemiyle dahi çözüme ulaşabilirsiniz. Örnek vermek gerekirse kodları satır satır ya da bloglar halinde çalışmasını engelleyerek kodun nerede hangi işlevde olduğunu bulabilir ve diğer programda gerekli yerlere aktarabilirsiniz. Projenizde şimdiden başarılar dilerim.
Adsız dedi ki…
Merhaba örnek projeyi indiremedim. Sanırım link otomatik olarak silinmiş. Tekrar yüklemeniz mümkünmü acaba
Birkan Aydın dedi ki…
Aslına bakarsanız indirebileceğiniz örnek proje linki sayfa içerisinde hiç bir zaman bulunmadı :)
Adsız dedi ki…
Kolay gelsin. Kodlar için teşekkür ederiz. Fakat bu görüntü işlemenin yanında el veya parmak hareketlerini takip eden bir yazılım için hangi kütüphaneyi kullanmalıyız?Önerileriniz nelerdir? Yardımcı olabilmeniz dileğimle. İyi günler .
Birkan Aydın dedi ki…
renkli bir eldiven takarak bu kütüphane ile rahatça halledebilirsin aslında ama el ve parmakları yakalayabilmek istiyorsan bu kütüphaneler üzerinden ciddi bir algoritma geliştirmen gerekir.
bu abi yapmış mesala http://www.youtube.com/watch?v=Wi53kbLRBwg

google da "aforge hand tracking" diye aratırsan mutlaka işe yarar bir şeyler bulacağına inanıyorum. Çalışmanda başarılar dilerim.
Adsız dedi ki…
hocam elinize sağlık fakat programdan çıkış yaptığımızda arka planda çalışmaya devam ediyor ve kamerayı kullanıyor görev yöneticisinden kapamak gerekiyor bilginize
Adsız dedi ki…
Paylaşımın için teşekkür ederim benim bi sorum olacaktı.aforge kütüphanesini kullanarak webcame gösterdiğimiz atıyorum bi kagıt var ve köşelerine birer simge yerleştirdik kagıdını gösterdiğimizde bu simgeleri tanıyacak ve geri kalan bütün kagıttaki bilgileri işleyeceğiz bunu nasıl yapabiliriz bi yol göstermen mümkün mü acaba
Birkan AYDIN dedi ki…
Bu yorum yazar tarafından silindi.
Birkan Aydın dedi ki…
Formun close olayına kameraAygit.Stop() komutunu girerseniz. Arka planda çalışma sorunu düzelecektir. Uyarınız için teşekkürler.
Adsız dedi ki…
hocam "C# Görüntü işleme" örneğinizi yapmaya çalıştığımda aşagıdaki hataları alıyorum . Nasıl çözebileceğim konusunda bir bilginiz var mı acaba?

http://i.hizliresim.com/nPQgMR.png
Birkan AYDIN dedi ki…
Sen direkt projeyi bir linke at istersersen.. ya da ekran görüntüsünü yolla, basit bir hatadan kaynaklandığını düşünüyorum. Form1 namespace ni bulamadım diyor. Parentezlere falan bi bak istersen eksik olabilir.
Adsız dedi ki…
bugün tekrardan denedim çalıştı dün bişeyler gözden kaçtı heralde .d çok teşekkür ederim faydalı konunuz ve yardımlarınız için.
Unknown dedi ki…
Merhabalar bu Aforge ile herhangi bir dikdörtgenin fotoğrafini çektiğimizde geri kalanını kirpa biliyor muyuz örneğin elimizdeki bir kartvizitin fotoğrafını çekip otomatik olarak sadece kartviziti alabilir miyiz? Teşekkürler
Birkan Aydın dedi ki…
http://cemyabansu.blogspot.com.tr/2013/02/c-fotograf-resim-kesme.html

adresten resim kırpma işlemlerine bakabilirsin...
Adsız dedi ki…
Merhabalar.
Yararlı yazınız için teşekkür ederim. Hotfile'a yüklemiş olduğunuz dosyalar silinmiş. Rica etsem tekrar yükleyebilir misiniz?
Saygılar.
Birkan Aydın dedi ki…
Üzülerek bildiriyorum ki, üzerinden çok uzun zaman geçtiği için kaynak dosyayı bulamıyorum. Bu konuda yardımcı olamıyorum. Kopyala&yapıştır ile yola devam etmek zorundayız :)
Adsız dedi ki…
Sağlık olsun, teşekkürler, iyi çalışmalar.
Adsız dedi ki…
http://www.mediafire.com/download/c8p7b7pgfsr7kl4/goruntuisleme.rar

Ben kendi yaptığım çalışmayı ekledim. saygılar
Unknown dedi ki…
Selamınaleyküm hayırlı günler hocamız bize bir ödev verdi ve ödevin konusu c# programı ile insan yüzünü bulup kare içine alması bunun için yardımınızı bekliyorum...
Unknown dedi ki…
hocam ornegınız ıcın tesekkur ederım.yukarda yazdıgınız sorunun cevabını bulamadım.aynı anda farklı renkelerı takıp etmem gerekıyor.ve kordınatlarını bılmem gerekıyor.lutfen yardım edın
saygılarımal
Unknown dedi ki…
kolay gelsin başka renk kodlarını nereden bulabilirim.
Birkan Aydın dedi ki…
filter.Red = new IntRange(150, 255);
filter.Green = new IntRange(0, 75);
filter.Blue = new IntRange(0, 75);

değerleri ile oynayarak renk kodlarını oluşturabilirsin.
Adsız dedi ki…
kolay gelsin bu kodlamayı yaparken hangi algoritmadan yaralandınız
Birkan AYDIN dedi ki…
Bu kodlamada herhangi bir algoritma kullanılmadı, tamamen hazır bir sınıftan ibaret.. Algoritma ile alakalı daha detaylı bilgiyi, aforgenet.com sayfasından edinebilirsiniz.
Adsız dedi ki…
çok teşekkür ederim çok yardımcı oldunuz
Adsız dedi ki…
Hocam iyi günler ben nesne takibi sırasında görüntüyü 3 parçaya bölmek istiyorum.İç içe for döngüleri ile yapmaya çalıştım fakat çalıştıramadım.Yazdığım kodları atsam nerede hata olduğuna bakabilir misiniz?
Unknown dedi ki…
Merhabalar görüntü işleme kullanarak dronela nesne takibi projesini yapabilir misiniz?
Unknown dedi ki…
Bu yorum yazar tarafından silindi.
Unknown dedi ki…
merhabalar hocam beyaz zemin arka planda objenin rengini bulmak istiyorum webcam den alınan görüntüyü yakalayıp grayscale threshold invert blobcounter yaptım 3.picturebox objenin rengini aktaramıyor siyah olarak geliyor ne yapabilirim yardımcı olur musunuz teşekkurler..
Adsız dedi ki…
Hocam projem vardı sizinki acaba bana atabilirmisiniz
halflifeatp@gmail.com
Zehra YÜCE dedi ki…
öncelikle kodları herkezin ulaşabileceği bi halde verdiğiniz için minnettarım :)
ülkemizde ne yazıkki paylaşımcı insanlar çok az:( benim bi projem içn kodlarınızı kullandım lakin filitre değerlerini değiştirmek istiyorum bu değerleri nasıl belirlemeliyim şimdiden teşekkürler.
Birkan AYDIN dedi ki…
Arkadaşlar maalesef artık eski projelerimin bir çoğuna sahip değilim. (HDD Kaybı) Proje isteyen arkadaşlara yardımcı olamıyorum. Filtre değerleri için de RGB değerleri ile oynabilirsiniz. Daha fazla yardımcı olamadığım için üzgünüm.

Bu blogdaki popüler yayınlar

C# pixel, görüntü işleme

İlk olarak Görüntü İşleme ile ilgili olan yazıyı okumanızı tavsiye edilir. http://yzgrafik.ege.edu.tr/~tekrei/dosyalar/sunum/gi.pdf bu dökümanın 25.sayfasındaki formülü kullanarak siyah beyaz bir resim yapalım dedim. Ekran görüntüsü aşağıdaki gibi oldu. Kaynak kodda şu şekilde ya da c# Pixel İşleme 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; namespace pixelIsleme { public partial class Form1 : Form { public Form1() { InitializeComponent(); } Bitmap PixelTara( Bitmap Goruntu) { Bitmap yeniGoruntu = new Bitmap (Goruntu.Width, Goruntu.Height); //Bitmap sınıfımızı oluşturduk. for ( int i = 0; i < Goruntu.Width; i++) //resmi yatay olarak taramak için { for ( int j...

C# Görüntü İşleme

Herkese merhabalar, Bu yazı dizimizde görüntü işlemeden bahsedeceğiz. Şunu belirtmek isterim ki bende yeni merak saldım bu alana ve buradan yaptığım işten çok yararlandığım kaynaklardan ve internetten nasıl kaynak bulduğum konusuna değineceğim. Sizinde bildiğiniz üzere internetten bir çok yazılmış makale bulunmakta, Aforge ‘ya henüz kulak aşınalığınız yoksa araştırmaya yeni başladığınız kanısına varıyorum. Ben bir şeye başlamadan önce her zaman doğru soruları bulmaya çalışırım ve sürekli soru sorma stilimi değiştirerek bilgiye ulaşmaya çalışırım. Şimdi bu konu hakkında kabataslak bir fikir oluşturmak için sorularımızı oluşturmamız ve cevaplarını aramamız gerekiyor. 1- Görüntü işleme nedir? 2- Resimlerde veya görüntülerde pixsel değerlerini nasıl okurum? 3- Webcam ‘de gerçek zamanlı olarak belirlediğim renkleri nasıl bulurum?(c# color tracking) 4- Yüz, nesne tanıma algoritmaları nasıl oluşturulur? 5- C# ‘ta görüntü işleme üzerine oluşturulmuş örnekler nelerdir? 6- Bu beş sorudan öğrendi...