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

OpenCV Dersleri – 1 Resim ve Video Yükleme

19 Ekim 2012 7.839 kez okundu Bir yorum
1 Star2 Stars3 Stars4 Stars5 Stars (3 oy,5 üzerinden : 3,67 )
Loading...

Merhaba arkadaşlar, opencv kütüphanemizi bilgisayarımıza kurduktan ve visual studio ile entegre ettikten sonra şimdi ilk uygulamamıza başlayalım. İlk dersimizde elimizde var olan resim ve video yu opencv ile ekranda göstereceğiz.

Projenizin hatasız çalışması için gerekli kütüphaneleri eklememiz gerekiyor. Kurulum dersini okumayan arkadaşlar buradan okuyarak visual studio içerisinde nasıl bir ayar yapmamız gerektiğini görebilirler.

Bu uygulamayı tabi ki  c++ projesi olarak yazacağız. Giriş niteliğinde olan bu proje için boş bir c++ projesi oluşturuyoruz. Eklememiz gereken ana kütüphaneler şunlar.

#include <opencv\cv.h>
#include <opencv\highgui.h>

İlk uygulamamızın kodunu verelim ve üzerinde konuşalım

#include <stdio.h>
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <math.h>
int main(int argc, char** argv)
{
	IplImage* src = NULL;
	//Resmi src değişkenine yüklüyoruz
	if((src=cvLoadImage("resim.jpg"))==0)
	{
		printf("Resim Yuklenemedi\n");
	}
	else
	{
		printf("Resim Yuklendi\n");
 
		//Tutorial 1 adında bir pencere oluşturduk.
		cvNamedWindow("Tutorial 1",CV_WINDOW_AUTOSIZE);
 
		//Yüklediğimiz resmi biraz önce oluşturduğumuz pencerede gösteriyoruz.
		cvShowImage("Tutorial 1",src);
 
		//Kullanıcı bir tuşa basıncaya kadar ekranda bu resmi gösteriyoruz.
		cvWaitKey(0);
 
		//Hafızada bulunan resmi boşaltıyoruz. (Temizlik :)
		cvReleaseImage(& src);
 
		//Oluşturduğumuz pencereyi yok ediyoruz.
		cvDestroyWindow("Tutorial 1");
	}
 
    return 0;
}

Resimlerimiz programda IplImage tipindeki değişkenlerde tutulur. Bu değişkenlere cvLoadImage() fonksiyonu ile resim yüklenir.

cvNamedWindow() fonksiyonu pencere ismi ve flag değişkeni alarak, yeni bir pencere yaratır.

cvShowImage() fonksiyonu içine daha önceden yaratılmış pencere ismi ve resim kaynağı verilerek, resmin ekranda çizilmesini sağlar.

cvWaitKey() ile kullanıcıdan bir tuşa basması beklenir. Böylece program sonlanmadan önce kullanıcıya resim gösterilmiş olur.

cvReleaseImage() içerisine resmi tutan değişkenin adresi verilerek, resmin memory den silinmesi sağlanır.

cvDestroyWindow() fonksiyonuna yok edilmek istenen pencerenin ismi verilerek, pencere silinir.

 

Resim gösterme işlemini tamamladık, şimdi biraz daha geliştirerek, video yu ekranda gösterelim. İlk olarak yine kodu paylaşıyorum.

 
#include <stdio.h>
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <math.h>
int main(int argc, char** argv)
{
	//Tutorial 1 adında bir pencere oluşturduk.
	cvNamedWindow("Tutorial 1",CV_WINDOW_AUTOSIZE);
 
	//Dosyadan okunan bir videa capture ismindeki değikene atılır.
	CvCapture* capture = cvCreateFileCapture("02.flv");
 
	//Resim tutan bu değişkenimiz, videonun her bir frame ini tutmak için kullanılacak.
	IplImage* frame;
 
	//Her bir frame işleninceye kadar
	while(1){
		frame = cvQueryFrame(capture);
		//Eğer frame ler bitmiş ise döngüyü sonlandırıyoruz
		if(!frame) break;
 
		//Sıradaki frame i pencerede gösteriyoruz
		cvShowImage("Tutorial 1",frame);
 
		//kullanıcıdan bir tuşa basmasını 33 ms süresince bekliyoruz
		char c = cvWaitKey(33);
 
		//Eğer esc ye basılmış ise döngü sonlanıyor
		if(c==27)
			break;
 
	}
 
	return 0;
}

CvCapture video formatındaki kaynaklarımızı tutuyor.

cvCreateFileCapture() fonksiyonu ile belli bir noktadaki video dosyamızı CvCapture tipindeki değişkene atıyoruz.

Şimdi bu videodaki her bir frame için işlem yapmamız gerekiyor. Videonun her bir frame i aslında bir resim olduğu için bu frame leri resim formatında yani IplImage tipinde tutacağız.

cvQueryFrame() metodu ile video içerisindeki frame leri tek tek çekiyoruz. Bundan sonrası yukarıdaki resim gösterme uygulamasındakinin aynısı. Sadece cvWaitKey fonksiyonunu esc tuşu için özelleştirdik. cvWaitKey fonksiyonu 33 birim süre kullanıcıdan bir tuşa basmasını bekliyor, basmaz ise devam ediyor. Bu sürenin artırılıp azaltılması ile video hızı değiştirilebilir.

Giriş niteliğindeki yazımız bu kadar. Burada bulunan resim ve videoları kendiniz seçebilirsiniz.

<<< Önceki:

Sonraki: >>>


Facebookta Paylaş

Bir yorum »

  • ersin dedi ki:

    Merhaba,
    Resim goruntuleme kodunuzu sorunsuz calıstırdım fakat video oynatma kodunuzu calıstıramadım.Videoyu dosydan okuyamadıgı için her seferinde ilk dongude
    if(!frame) break;
    koduna girip cıkıyo donguden.
    sizce nerde hata yapıyorumdur.

    Tesekkurler

    Ersin Guler

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.