Ask Your Question

Revision history [back]

i tried to do some corrections and improvements on your code. i hope it will help.

#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <stdio.h>
using namespace std;
using namespace cv;
int main(int argc, const char** argv)
{
CascadeClassifier eye;
CascadeClassifier righteye;
CascadeClassifier lefteye;
eye.load("haarcascade_mcs_eyepair_small.xml");
righteye.load("haarcascade_mcs_lefteye.xml");
lefteye.load("haarcascade_mcs_righteye.xml");
VideoCapture vid;
vid.open(0);
if (!vid.isOpened())
{
cout<<"webcam yuklenemedi"<<endl;
system("Pause");
return -1;
}
Mat frame;
Mat grires;
Mat frame2;
Mat frame3;
namedWindow("algilanan", WINDOW_AUTOSIZE);
namedWindow("algilanan2", WINDOW_AUTOSIZE);
namedWindow("algilanan3", WINDOW_AUTOSIZE);
while(true)
{
vid>>frame;
cvtColor(frame, grires, CV_BGR2GRAY);  //resmi gri renk uzayına çevirir.
//equalizeHist(grires, grires); //istenirse histogram eşitlenir.
vector<Rect> eyepair;
eye.detectMultiScale(grires, eyepair, 1.1, 3, 0, Size(30,30));
for(int i = 0; i < eyepair.size(); i++)
{
rectangle(frame, eyepair[i], Scalar(0, 255, 0));
Mat ROI =grires(eyepair[i]);
vector<Rect> reye;
vector<Rect> leye;
righteye.detectMultiScale(ROI, reye, 1.1, 3, 0, Size(30,30));
lefteye.detectMultiScale(ROI, leye, 1.1, 3, 0, Size(30,30));
for(int t = 0; t < reye.size(); t++)
{
bool isRightEye = reye[t].x > eyepair[i].width / 2;
reye[t].x += eyepair[i].x;
reye[t].y += eyepair[i].y;
rectangle(frame, reye[t], Scalar(0, 255, 0));

if(isRightEye)
frame3 = grires(reye[t]);
}
for(int z = 0; z < leye.size(); z++)
{
bool isLeftEye = leye[z].x < eyepair[i].width / 2;
leye[z].x += eyepair[i].x;
leye[z].y += eyepair[i].y;
rectangle(frame, leye[z], Scalar(0, 255, 0));

if(isLeftEye)
frame2 = grires(leye[z]);
}
}

imshow("algilanan", frame);
if(!frame2.empty())
    imshow("algilanan2", frame2);

if(!frame3.empty())
    imshow("algilanan3", frame3);
waitKey(33);
}
return 0;
}