İnternetten indirdiğiniz OpenCV dosyalarını kurulum yayınımda anlattığım gibi C:/ nin altına yerleştirdiyseniz ve adını da OpenCV-3.1.0 yaptıysanız sanıyorum sorun yaşamayacaksınız. Sizdeki durum farklıysa, aşağıdaki kodlarda adres belirttiğim yere kendi OpenCV adresinizi yazmalısınız.
Şimdilik kısaca paylaşıyorum. Daha sonra bu yayına dönüp açıklamalarını da yapmayı düşünüyorum.
#include "stdafx.h"
#include <opencv2\opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
VideoCapture kamera(0);
Mat frame, frame_gri;
CascadeClassifier dedektor;
bool yuklendi = dedektor.load("C:/OpenCV-3.1.0/build/etc/haarcascades/haarcascade_frontalface_alt.xml");
// detectMultiscale Cascade Classifier Parametreleri
int groundThreshold = 2;
double scaleStep = 1.1;
Size minimumNesneBoyutu(80, 80);
Size maksimumNesneBoyutu(250, 250);
vector<Rect> bulunanlar;
while(true) {
kamera >> frame;
flip(frame, frame, 1);
cvtColor(frame, frame_gri, CV_BGR2GRAY);
bulunanlar.clear();
// Yüzleri algılayalım/bulalım/detect edelim :)
dedektor.detectMultiScale(frame_gri, bulunanlar, scaleStep, groundThreshold, CV_HAAR_SCALE_IMAGE, minimumNesneBoyutu, maksimumNesneBoyutu);
if (bulunanlar.size() > 0)
for (int i = 0; i <= bulunanlar.size() - 1; i++)
rectangle(frame, bulunanlar[i].br(), bulunanlar[i].tl(), Scalar(0, 0, 0));
rectangle(frame, bulunanlar[i].br(), bulunanlar[i].tl(), Scalar(0, 0, 0));
imshow("Yuz Bulucu", frame);
if (waitKey(20) == 27) break;
}
destroyAllWindows();
return 0;
}
vector<Rect> bulunanlar;
Bulunan yüzlerimiz bu diziye atanacak.
detectMultiScale(image, objects, scaleFactor, minNeighbors, flags, minSize, maxSize);
Yüz bulma işini yapan komutumuz. Aslında bununla sadece yüz bulma işi yapmıyoruz tabii ki. İlerleyen yayınlarda bunun farklı kullanımlarını da göreceğiz. Şimdi, örneğimizde kullandığımız haliyle parametrelerin ne işe yaradığını görelim:
image – CV_8U tipinde görüntü içeren bir matristeki objeleri tespit edeceğiz. (tür: Mat)
objects – Tespit edilen objelerin atılacağı dikdörtgenler vektörü dizisi... ( vector<Rect> dediğimiz dizi)
scaleFactor – Her resim ölçeğinde görüntü boyutunun ne kadar azalacağı. (Görüntü boyutu bir miktar azaltılmalı ki bu arama işlemimiz hızlı bir şekilde tamamlanabilsin) (tür: double)
minNeighbors – Her aday dikdörtgenin kabulü için minimum kaç komşusu olmalı? (Aradığımız objenin tespiti için görüntümüz kare kare incelenir. Bu karelerden bazılarında aradığımız objenin bulunma olasılığı vardır. Eğer bu aday kareler birbirine komşu ise, bu komşu karelerde gerçekten de aradığımız obje vardır diyebiliriz. Bu parametre ile, "En az kaç karenin komşu olması ile o bölgede aradığımız objenin varlığı kabul edilsin?" sorusuna cevap veriyoruz. Bu mevzuyu daha iyi anlamanız için şu videoya bir göz atabilirsiniz: https://vimeo.com/12774628 (tür: int)
flags – Henüz ne işe yaradığını bilmiyorum. Bilen bana da söylesin. Sıfır da verseniz oluyor. :) (tür: int)
minSize – Aradığımız objenin min. boyutları. Bu boyutlardan küçük olanlar ilgisiz kabul edilir. (tür: Size)
maxSize – Aradığımız objenin maks. boyutları. Bu boyutlardan büyük olanlar ilgisiz kabul edilir. (tür: Size)
Bu konuda pek Türkçe kaynak yoktu. Artık var... :)
kamera >> frame;
Bu şekildeki kullanımı ilk kez görmüş olabilirsiniz. Burada kamera.read(frame); demiş olduk.
CascadeClassifier dedektor;
Bu şekildeki kullanımı ilk kez görmüş olabilirsiniz. Burada kamera.read(frame); demiş olduk.
CascadeClassifier dedektor;
bool yuklendi = dedektor.load("C:/OpenCV-3.1.0/build/etc/haarcascades/haarcascade_frontalface_alt.xml");
haarcascade_frontalface_alt.xml dosyasının içinde, insan yüzlerini bulmaya yarayacak bilgiler mevcut. Bu xml dosyasını load ettiğimizde, dedector adlı CascadeClassifier nesnemiz insan yüzü bulmaya odaklanacaktır. Bu xml dosyasının bulunduğu klasöre bakarsanız, farklı nesnelerin de bulunmasına olanak veren farklı xml dosyaları olduğunu görebilirsiniz.
haarcascade_frontalface_alt.xml dosyasının içinde, insan yüzlerini bulmaya yarayacak bilgiler mevcut. Bu xml dosyasını load ettiğimizde, dedector adlı CascadeClassifier nesnemiz insan yüzü bulmaya odaklanacaktır. Bu xml dosyasının bulunduğu klasöre bakarsanız, farklı nesnelerin de bulunmasına olanak veren farklı xml dosyaları olduğunu görebilirsiniz.
vector<Rect> bulunanlar;
Bulunan yüzlerimiz bu diziye atanacak.
detectMultiScale(image, objects, scaleFactor, minNeighbors, flags, minSize, maxSize);
Yüz bulma işini yapan komutumuz. Aslında bununla sadece yüz bulma işi yapmıyoruz tabii ki. İlerleyen yayınlarda bunun farklı kullanımlarını da göreceğiz. Şimdi, örneğimizde kullandığımız haliyle parametrelerin ne işe yaradığını görelim:
Hiç yorum yok:
Yorum Gönder