// CPP program to detects face in a video // Include required header files from OpenCV directory #include "/usr/local/include/opencv2/objdetect.hpp" #include "/usr/local/include/opencv2/highgui.hpp" #include "/usr/local/include/opencv2/imgproc.hpp" #include <iostream> using namespace std; using namespace cv; // Function for Face Detection void detectAndDraw( Mat& img, CascadeClassifier& cascade, CascadeClassifier& nestedCascade, double scale ); string cascadeName, nestedCascadeName; int main( int argc, const char** argv ) { // VideoCapture class for playing video for which faces to be detected VideoCapture capture; Mat frame, image; // PreDefined trained XML classifiers with facial features CascadeClassifier cascade, nestedCascade; double scale=1; // Load classifiers from "opencv/data/haarcascades" directory nestedCascade.load( "../../haarcascade_eye_tree_eyeglasses.xml" ) ; // Change path before execution cascade.load( "../../haarcascade_frontalcatface.xml" ) ; // Start Video..1) 0 for WebCam 2) "Path to Video" for a Local Video capture.open(0); if( capture.isOpened() ) { // Capture frames from video and detect faces cout << "Face Detection Started...." << endl; while(1) { capture >> frame; if( frame.empty() ) break; Mat frame1 = frame.clone(); detectAndDraw( frame1, cascade, nestedCascade, scale ); char c = (char)waitKey(10); // Press q to exit from window if( c == 27 || c == 'q' || c == 'Q' ) break; } } else cout<<"Could not Open Camera"; return 0; } void detectAndDraw( Mat& img, CascadeClassifier& cascade, CascadeClassifier& nestedCascade, double scale) { vector<Rect> faces, faces2; Mat gray, smallImg; cvtColor( img, gray, COLOR_BGR2GRAY ); // Convert to Gray Scale double fx = 1 / scale; // Resize the Grayscale Image resize( gray, smallImg, Size(), fx, fx, INTER_LINEAR ); equalizeHist( smallImg, smallImg ); // Detect faces of different sizes using cascade classifier cascade.detectMultiScale( smallImg, faces, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) ); // Draw circles around the faces for ( size_t i = 0; i < faces.size(); i++ ) { Rect r = faces[i]; Mat smallImgROI; vector<Rect> nestedObjects; Point center; Scalar color = Scalar(255, 0, 0); // Color for Drawing tool int radius; double aspect_ratio = (double)r.width/r.height; if( 0.75 < aspect_ratio && aspect_ratio < 1.3 ) { center.x = cvRound((r.x + r.width*0.5)*scale); center.y = cvRound((r.y + r.height*0.5)*scale); radius = cvRound((r.width + r.height)*0.25*scale); circle( img, center, radius, color, 3, 8, 0 ); } else rectangle( img, cvPoint(cvRound(r.x*scale), cvRound(r.y*scale)), cvPoint(cvRound((r.x + r.width-1)*scale), cvRound((r.y + r.height-1)*scale)), color, 3, 8, 0); if( nestedCascade.empty() ) continue; smallImgROI = smallImg( r ); // Detection of eyes int the input image nestedCascade.detectMultiScale( smallImgROI, nestedObjects, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) ); // Draw circles around eyes for ( size_t j = 0; j < nestedObjects.size(); j++ ) { Rect nr = nestedObjects[j]; center.x = cvRound((r.x + nr.x + nr.width*0.5)*scale); center.y = cvRound((r.y + nr.y + nr.height*0.5)*scale); radius = cvRound((nr.width + nr.height)*0.25*scale); circle( img, center, radius, color, 3, 8, 0 ); } } // Show Processed Image with detected faces imshow( "Face Detection", img ); }
Write, Run & Share C++ code online using OneCompiler's C++ online compiler for free. It's one of the robust, feature-rich online compilers for C++ language, running on the latest version 17. Getting started with the OneCompiler's C++ compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as C++
and start coding!
OneCompiler's C++ online compiler supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample program which takes name as input and print your name with hello.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
cout << "Enter name:";
getline (cin, name);
cout << "Hello " << name;
return 0;
}
C++ is a widely used middle-level programming language.
When ever you want to perform a set of operations based on a condition If-Else is used.
if(conditional-expression) {
//code
}
else {
//code
}
You can also use if-else for nested Ifs and If-Else-If ladder when multiple conditions are to be performed on a single variable.
Switch is an alternative to If-Else-If ladder.
switch(conditional-expression){
case value1:
// code
break; // optional
case value2:
// code
break; // optional
......
default:
code to be executed when all the above cases are not matched;
}
For loop is used to iterate a set of statements based on a condition.
for(Initialization; Condition; Increment/decrement){
//code
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while (condition) {
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity. Function gets run only when it is called.
return_type function_name(parameters);
function_name (parameters)
return_type function_name(parameters) {
// code
}