Anasayfa » C++, Görüntü İşleme - OpenCv

OpenCV Dersleri – 2 Resim Üzerinde Basit İşlemler

20 Ekim 2012 5.043 kez okundu Yorum yok
1 Star2 Stars3 Stars4 Stars5 Stars (1 oy,5 üzerinden : 5,00 )
Loading...

Merhaba arkadaşlar,  bu dersimizde resim üzerinde yapılabilecek basit işlemler üzerinde duracağız. Önceki yazılarımızı okumayan arkadaşlarımızın, akıcı bir ders olması için öncelikle ilk dersleri okumalarını öneriyorum.

İlk olarak bir resim üzerinde Gaussian blur dönüşümü yapacağız. Kodumuz şu şekilde olacak,

#include <stdio.h>
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <math.h>
int main(int argc, char** argv)
{
	//Resmi yüklüyoruz
	IplImage* img = cvLoadImage( "resim.jpg" );
 
	//İki tane pencere yaratıyoruz
	cvNamedWindow( "Tutorial orijinal" );
	cvNamedWindow( "Tutorial blured" );
 
	//Resmin orjinalini gösteriyoruz
	cvShowImage("Tutorial orijinal", img);
 
	// Bulanıklaşmış resmi koyacağımız değişkeni hazırlıyoruz.
	// img değişkenindeki resmin boyutlarında, 8 bitlik 3 kanala sahip yeni bir değişken hazırlandı
	IplImage* out = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 3 );
 
	// Gaussian blur uyguluyoruz.
	cvSmooth( img, out, CV_GAUSSIAN, 111, 111 );
 
	// Oluşan resmi gösteriyoruz
	cvShowImage("Tutorial blured", out);
 
	//Bekleme ve temizleme işlemleri
	cvWaitKey(0);
	cvReleaseImage( &img );
	cvReleaseImage( &out );
	cvDestroyWindow( "Tutorial orijinal" );
	cvDestroyWindow( "Tutorial blured" );
 
	return 0;
}

Çalışan programın görüntüsü şu şekilde olacak,

IplImage tipindeki değişkene cvLoadImage ile resmi yükledikten sonra, cvNamedWindow ile iki tane pencere oluşturuyoruz. Birisi orjinal, birisi dönüşüm uygulanmış resim için. Daha sonra
IplImage* out = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 3 );
işlemi ile yeni bir resim yaratıyoruz. Bu resim orjinal resim boyutlarında 8bitlik 3 kanallı yeni bir resim olacak.

cvSmooth fonksiyonu ile ilgili resme istediğimiz dönüşümü uygulayabiliyoruz. Burada  CV_GAUSSIAN sabitinde bulunan dönüşümü uyguladık. Fonksiyondaki 11  sayılarını değiştirerek resmin nasıl değiştiğini gözlemleyebilirsiniz.

 

İkinci uygulamamız ise,  resmin özelliklerine erişim ve Canny edge detection ile kenar bulma algoritmasını incelemek.

Kodumuz şu şekilde,

#include <stdio.h>
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <math.h>
int main(int argc, char** argv)
{
	//Resmi yüklerken ikinci parametre olarak 0 değeri verildiğinde, resim grayscale e dönüştürülür.
	IplImage* img = cvLoadImage( "resim.jpg", 0);
 
	//iki pencere oluşturuyoruz
	cvNamedWindow( "Tutorial-in" );
	cvNamedWindow( "Tutorial-out" );
 
	// Orjinal resmi gösteriyoruz
	cvShowImage("Tutorial-in", img);
 
	// Resmin boyutlarının 2 ye bölünebildiğinden emin oluyoruz. 
	assert( img->width%2 == 0 && img->height%2 == 0);
 
	// Yeni bir resim kalıbı oluşturuyoruz. Bu resim kalıbı orjinal resmin yarı boyutlarında, orjinal resmin derinliğine ve kanalına sahip
	IplImage* out = cvCreateImage( cvSize(img->width/2,img->height/2), img->depth, img->nChannels );
 
	//Orjinal resmin kopyasını yeni oluşturduğumuz kalıba oturtuyoruz.
	cvPyrDown( img, out );
 
	//Buradan yeni oluşan küçük resmi görebilirsiniz.
	//cvShowImage("Tutorial-out", out);
 
	// Canny edge detection uyguluyoruz
	cvCanny( out, out, 10, 100, 3 );
 
	// Show the processed image
	cvShowImage("Tutorial-out", out);
 
	cvWaitKey(0);
	cvReleaseImage( &img );
	cvReleaseImage( &out );
	cvDestroyWindow( "Tutorial-in" );
	cvDestroyWindow( "Tutorial-out" );
 
	return 0;
 
}

Ekran görüntümüz ise,

Bu örnekte farklı bir resim yükleme  ile karşılaştık. cvLoadImage fonksiyonu ikinci bir parametre olan “0” değerini aldı. Bu parametre ile yüklenen resmin grayscale olmasını sağlayabiliyoruz.

Resmimizin özelliklerine “->” işaretini kullanarak erişebiliyoruz. Örneğin yeni resim kalıbı yaratırken, img->width/2  veya img->depth gibi değerler kullandık.

Oluşturduğumuz yeni kalıba resmimizi oturtturmamız gerekli, çünkü yeni kalıp, orjinal resmin yarı boyutlarında, bu işlemi cvPyrDown fonksiyonu ile yapıyoruz. Yeni oluşan bu yarı boyutlarındaki grayscale resme cvCanny algoritması uygulayarak, kenar tanımlama algoritmasını çalışmasını görüyoruz. Bir resme cvCanny uygulayabilmek için, orjinal resmin grayscale, yani gri tonda (siyah beyaz ve ara renkleri ) bir resim olması gerekmektedir.

cvCanny parametreleri ise, input, output, alt eşik, üst eşik, açıklıktır.

Bu yazımızda resimler üzerinde basit işlemler yaptık. Daha sonraki derslerde görüşme üzere, iyi günler diliyorum.

<<< Önceki:

Sonraki: >>>


Facebookta Paylaş

Yorum Bırakın!

Yorum yaz, yada kendi sitende trackback (Geri besleme) olarak ekle. Ayrıca RSS ile bu konuya üye olabilirsin. .

Nazik olun. Temiz tutun. Konu dışına çıkmayın. Spam yaratmayın.

Bu tagları kullanabilirsiniz:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Bloğumuz gavatarı desteklemektedir. Kendi gavatarınızı edinmek için lütfen Gravatar a üye olun.