OpenCV Dersleri – 2 Resim Üzerinde Basit İşlemler
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.
Bunlara da Göz Atmak İsteyebilirsiniz.
<<< Önceki: OpenCV Dersleri – 1 Resim ve Video Yükleme
Sonraki: OpenCV Dersleri – 3 Resim Üzerine Şekil Çizme ve Yazı Yazma >>>
Yorum Bırakın!