OpenCV- Video Açma, Kameradan Görüntü Alma
Merhaba Arkadaşlar,
Sizlere bu yazımda OpenCV kütüphanesini kullanarak bir video dosyasını açma ve web-cam’den görüntü alma işlemini gerçekleştiren fonksiyonları anlatıp görüntüyü siyah beyaz olarak göstereceğim. Renkli olarak çıktı görmek isteyenler sadece bir yeri değiştirerek bu işlemi gerçekleştirebilecekler.
Bildiğiniz gibi videolar aslında resimlerin arka arkaya gösterilmesinden ibarettir. Yani bir video içinde saniyede 23 (FPS), 30(FPS)(frame per second) resim bulunabilir. Ilk olarak yapmamız gereken bu resimleri okuyabilmek için IplImage* yapısında bir değişken(ben bu değişkene frame ismini vereceğim).
Videoyu açacağımız yapıyı tutan ise CvCapture*, bunun değişkenine de video diyelim.
IplImage* frame;
CvCapture* video = cvCaptureFromAVI(“Dosyanin_ismi.avi”); /*Burada dosya .exe dosyası ile aynı yerde olacak veya kendiniz dosyanin yerini tam girerek yazacaksiniz.*/
Bundan sonra videoyu sonsuz döngü içinde kontrol edip video bittiğinde while’dan çıkan bir kod yazacağız. İsteyen arkadaşlar için video bittiğinde tekrar açılması için ne yapılması gerektiğini tekrar yorum şeklinde yazacağım. Kısaca video açma işlemini tekrar yapabilirsiniz. Video’nun herhangi bir anında çıkılmak istendiğinde “esc” tuşunu basarak çıkmak için bir char okuma işlemi de yapacağız. “esc” nin ASCII kodu 27′dir.
cvWaitKey(/*milisaniye cinsinden int değeri girilecek*/); Bu fonksiyon bize içine girilen değer kadar bekler, eğer bir tuşa basıldıysa onun ASCII kodunu döndürür.
Videodan okunan resmi siyah-beyaza dönüştürmek için cvCvtColor( input, output, CV_BGR2GRAY ); fonsiyonunu kullanıyoruz. Unutmayalım ki arkadaşlar siyah beyaz resim 0-255 arasında değer alır sadece, yani channel size 1 dir. Renkli resimde ise bu 3 tür, çünkü RGB değerleri tutulur.
Kodumuza bakacak olursak :
#include "cv.h"
#include "highgui.h"
int main()
{
IplImage* frame;
CvCapture* video = cvCaptureFromAVI("video.avi");
frame = cvQueryFrame(video);
cvNamedWindow("acilan_video",CV_WINDOW_AUTOSIZE); //pencere ac
IplImage* siyah_beyaz = cvCreateImage(cvGetSize(frame),8,1); //gri resim icin,
char c= 0;
while(c!=27) /*ESC ASCII KODU*/{
cvCvtColor(frame,siyah_beyaz,CV_BGR2GRAY); //griye cevir
cvShowImage("acilan_video",siyah_beyaz); //goster
frame = cvQueryFrame(video);
if(!frame) break; /*video bitti*/ /*Tekrar açmak isteyen video = cvCaptureFromAVI(""); kullanacak*/
c= cvWaitKey(33); //33 milisaniye bekle ve girilen karakteri al
}
/*Memory'i temizle, Dinamik programlama*/
cvReleaseCapture(&video);
cvReleaseImage(&siyah_beyaz);
cvDestroyWindow("acilan_video");
}Kameradan görüntü almak isteyen arkadaşlar için, video ile aynı mantıkta. Burada sadece frame değişkinine karşılık gelen fonksiyon değişiyor. Koda bakarak farkı inceleyebilirsiniz.
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <ctype.h>
int main()
{
IplImage *frame;
CvCapture *capture=cvCaptureFromCAM(0);
if(capture ==NULL ){
printf("Kameradan görüntü alınamıyor!");
exit(-1);
}
cvNamedWindow("Webcam",1);
char c = 0;
while(c!=27){
frame = cvQueryFrame( capture );
if( !frame ) break; //kameradan veri alinmiyorsa
cvShowImage( "Webcam", frame );
c=cvWaitKey(33); //escape e basilirsa cik
}
cvDestroyWindow("Webcam");
cvReleaseCapture(&capture);
}
Reference : Learning OpenCV Computer Vision with the OpenCV Library ,O'REILLY
video : beni unutma filminden bir görüntüdür.





Merhabalar benim bilgisayarıma entegre bir kameram var. bu kodu kullandığımda ışığı yanıyor ama görüntü gözükmüyor. Problem ne olabilir, yardımcı olabilirseniz çok sevinirim.
Nasıl bir kod yazdınız? While içinde sürekli görüntü almanız gerekiyor. Bir de CvCapture *capture=cvCaptureFromCAM(-1); şeklinde yazarsanız bilgisayara bağlı olan rastgele bir camera açar.(-1 parameteresi). Orayı -1 yazın tekrar deneyin. While döngüsü önemli yapmazsanız görüntü göremezsiniz.
There is so much information in the net. Sometimes you can feel confused but be patient, you need to look at how to embed OpenCV library into Eclipse. That means that you need to show the location of OpenCV both OS(Operating System) and Eclipse IDE. If you want to see eclipse project, i can prepare a new prensentation or gice you a link where you can find the information about OpenCV with Eclipse.