Merhaba arkadaşlar... Bu yazımda EmguCV kullanarak renkli görüntüleri (RGB) gri tonlamalı görüntülere (GrayScale) çevirmeyi göstereceğim. Öncelikle neden renkli görüntüleri, gri tonlamalı renklere çeviriyoruz bunu anlamamız gerekiyor.
Görüntü işlemeyi öğrenmek için öncelikle gri tonlama işlemini anlamak ve tam renkli görüntülemeyle başlamadan ve çok kanallı işleme nasıl uygulandığını anlamak daha iyi olur
- Hız: Renkli görüntüler çok kanallıdır. Eğer resimleri grayscale yaparsak tek kanala inecektir. Tek kanalda işlem yapacağımızdan dolayı hızımız artacaktır.
- Basit görevler için (ör. Kenar algılama), yoğunluk önemli bir rol oynamaktadır. Gri tonlama (yani yoğunluk) genellikle bu tür kenarları ayırmak için yeterlidir.
Gri Düzeyli Görüntü
Görüntü farklı gri ton değerlerinden oluşur. Gri değer aralıkları: G={0,1,2,………..255} şeklinde ifade edilir. Bunun anlamı şudur: Bir gri tonlu görüntüde 256 tane farklı gri ton değeri daha doğrusu gri değer bulunabilir. Burada 256 gri değer bir byte olarak tanımlanabilir (1 Byte=8 Bit ve 28 = 256 bit).
Sıfır gri değeri kural olarak siyah renk değerine, 255 gri değeri ise beyaza karşılık gelir. Bu değerler arasında ise gri tonlar oluşur.
UYGULAMA :
UYGULAMA :
Aşağıda iki farklı yöntemle gri tonlamaya çevirme gösterilmiştir.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public partial class MainForm : Form | |
{ | |
private Image<bgr, byte> m_originalImage; | |
private static void fillSizeInfo(Label label, Mat m) | |
{ | |
label.Text = m.Height + "x" + m.Width; | |
} | |
public MainForm() | |
{ | |
InitializeComponent(); | |
} | |
private void m_buttonOK_Click(object sender, EventArgs e) | |
{ | |
try | |
{ | |
OpenFileDialog dlg = new OpenFileDialog(); | |
if (dlg.ShowDialog() != DialogResult.OK) | |
return; | |
m_originalImage = new Image<bgr, byte>(dlg.FileName); | |
m_pictureBoxOriginalImage.Image = m_originalImage.ToBitmap(); | |
fillSizeInfo(m_labelOriginalSize, m_originalImage.Mat); | |
} | |
catch (Exception ex) { | |
MessageBox.Show(ex.GetType().Name + " " + ex.Message); | |
} | |
} | |
private void m_buttonGrayScale_Click(object sender, EventArgs e) | |
{ | |
try | |
{ | |
if (m_originalImage == null) | |
{ | |
MessageBox.Show("You must choose an image"); | |
return; | |
} | |
using (Image<gray, byte> img = new Image<gray, byte>(new Bitmap(m_pictureBoxOriginalImage.Image))) { | |
m_pictureBoxResult.Image = img.ToBitmap(); | |
fillSizeInfo(m_labelResultSize, img.Mat); | |
} | |
} | |
catch (Exception ex) | |
{ | |
MessageBox.Show(ex.GetType().Name + " " + ex.Message); | |
} | |
} | |
private void m_buttonMakGrayScale2_Click(object sender, EventArgs e) | |
{ | |
try | |
{ | |
if (m_originalImage == null) | |
{ | |
MessageBox.Show("You must choose an image"); | |
return; | |
} | |
using (Image<gray, byte> img = m_originalImage.Convert<gray, byte>()) //OpenCV kullanmış oluyoruz | |
{ | |
m_pictureBoxResult.Image = img.ToBitmap(); | |
fillSizeInfo(m_labelResultSize, img.Mat); | |
} | |
} | |
catch (Exception ex) | |
{ | |
MessageBox.Show(ex.GetType().Name + " " + ex.Message); | |
} | |
} | |
} |