Я разработал код. Проблема в том, когда я конвертирую ее в реальном времени, она не переходит к окончательному решению. Что я должен добавить, чтобы код перешел к окончательному решению? Я хочу, чтобы он читал код и давал результат кадр за кадром всего за 30 секунд, затем он переходит к окончательному решению. Может кто-нибудь мне помочь?Как перейти к окончательному решению в режиме реального времени?
int main(int argc,char** argv)
{
VideoCapture capture(0);
Mat frame,resize_blur_Img,fgmaskMOG,binaryImg;
Ptr<BackgroundSubtractor>pMOG;
pMOG = new BackgroundSubtractorMOG();
int frame_count=0;
int detected_face_count = 0;
int detected_motion_count = 0;
CascadeClassifier cascade;
if (!cascade.load("C:/opencv2410/sources/data/haarcascades/haarcascade_frontalface_alt.xml"))
{
cerr << "ERROR: Could not load classifier cascade" << endl;
return -1;
}
Mat element = getStructuringElement(MORPH_RECT, Size(7, 7), Point(3, 3));
while (true)
{
//MOTION DETECTION
if (!(capture.read(frame)))
break;
frame_count++;
resize(frame, resize_blur_Img, Size(frame.size().width, frame.size().height));
pMOG->operator()(resize_blur_Img, fgmaskMOG, -1);
threshold(binaryImg, binaryImg, 128, 255, CV_THRESH_BINARY);
int TotalNumberOfPixels = fgmaskMOG.rows*fgmaskMOG.cols;
//FACE DETECTION
capture >> frame;
if (frame.empty())
break;
imshow("original", frame);
vector<Rect>faces;
cascade.detectMultiScale(frame, faces, 1.1, 4, 0, Size(40, 50));//(const Mat& image, vector <Rect>& objects, double scaleFactor, int minNeighbors,int flags, Size minSize,Size maxSize)
for (int i = 0; i < faces.size(); i++)
{
rectangle(frame, faces[i], Scalar(0, 0, 255));
}
imshow("MOTION DETECTION", fgmaskMOG);
imshow("FACE DETECTION", frame);
char c = waitKey(10);
printf("count of pixels: %d \n", countNonZero(fgmaskMOG));
printf("%d Face Found !\n", faces.size());
if (faces.size()>0 &&countNonZero(fgmaskMOG)>1)
{
detected_face_count++;
detected_motion_count++;
printf("FACE AND MOTION DETECTED !\n\n");
}
else if (faces.size()>0 && countNonZero(fgmaskMOG)==0)
{
detected_face_count++;
printf("ONLY FACE DETECTED !\n\n");
}
else if (faces.size() == 0 && countNonZero(fgmaskMOG) > 1)
{
detected_motion_count++;
printf("ONLY MOTION DETECTED !\n\n");
}
else
{
printf("NOTHING DETECTED !\n\n");
}
//I want it to stop until here after 30 second and show the final decision according to rule below
}
printf("count of frames: %d \n", frame_count);
printf("count of frames has detected face: %d \n", detected_face_count);
printf("count of motion detected: %d \n", detected_motion_count);
printf("Face Found %d percent of frames ! \n", (int)(100 * detected_face_count/frame_count));
printf("Motion Found %d percent of frames ! \n", (int)(100 * detected_motion_count/frame_count));
//FINAL DECISION FROM ALL THE FRAME
if (((float)(detected_face_count/frame_count) > 0.49) && (((float)detected_motion_count/(float)frame_count)>0.19))
{
printf("HUMAN DETECTED FROM BOTH DETECTION ! \n\n");
}
else if (((float)detected_motion_count/(float)frame_count)>0.19)
{
printf("POSSIBLE HUMAN DETECTED FROM MOTION DETECTION ONLY !\n\n");
}
else if ((float)(detected_face_count/frame_count) > 0.49)
{
printf("POSSIBLE HUMAN DETECTED FROM FACE DETECTION ONLY !\n\n");
}
else
{
printf("HUMAN NOT DETECTED \n\n");
}
getch();
}
Что вы подразумеваете под «сделать это в режиме реального времени»? Получение видео с живой камеры вместо записанного видео? Можете ли вы опубликовать минимальный пример своего кода? – sietschie
Я редактировал код выше. – CBP