जब हम चेहरे की स्थिति को ट्रैक करना चाहते हैं, तो चेहरे को दीर्घवृत्त से घेरना बेहतर होता है क्योंकि दीर्घवृत्त का एक केंद्र होता है। यह केंद्र पता लगाए गए चेहरे का केंद्र बिंदु भी होता है। परिणामस्वरूप, पता लगाए गए चेहरे की स्थिति को ट्रैक करना अधिक सटीक हो जाता है।
निम्नलिखित प्रोग्राम पता लगाए गए चेहरे के केंद्र को ट्रैक करता है और कंसोल विंडो में स्थिति दिखाता है -
उदाहरण
#include<iostream> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> //इस हेडर में 'rectangle()' फंक्शन की परिभाषा शामिल है// #include<opencv2/objdetect/objdetect.hpp> //इस हेडर में Cascade Classifier की परिभाषा शामिल है// #include<string> using namespace std; using namespace cv; int main(int argc, char** argv){ Mat image_with_humanface;//मानव चेहरे वाली छवि लोड करने के लिए मैट्रिक्स घोषित करना// image_with_humanface = imread("person.jpg");//उसमें मानव चेहरा वाली छवि लोड करना// namedWindow("Face Detection");//परिणाम दिखाने के लिए एक विंडो घोषित करना// string trained_classifier_location = "C:/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml";//एक स्ट्रिंग में हमारे XML प्रशिक्षित क्लासिफायर का स्थान परिभाषित करना// CascadeClassifier faceDetector;//CascadeClassifier क्लास का 'face detector' नामक ऑब्जेक्ट घोषित करना// faceDetector.load(trained_classifier_location);//ऑब्जेक्ट में XML प्रशिक्षित क्लासिफायर लोड करना// vector<Rect>faces;//faces नामक आयताकार वेक्टर घोषित करना// faceDetector.detectMultiScale(image_with_humanface, faces, 1.1, 4, CASCADE_SCALE_IMAGE,Size(20,20));//'image_with_humanfaces' मैट्रिक्स में चेहरों का पता लगाना// for (int i = 0; i < faces.size(); i++){ //सबसे बड़े चेहरे का पता लगाने के लिए लूप शुरू करना// Point center(faces[i].x + faces[i].width * 0.5, faces[i].y + faces[i].height * 0.5);//चेहरे का केंद्र प्राप्त करना// ellipse(image_with_humanface, center, Size(faces[i].width * 0.5, faces[i].height * 0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);//चेहरे पर दीर्घवृत्त बनाना// int horizontal = (faces[i].x + faces[i].width * 0.5);//निर्देशांक का क्षैतिज मान प्राप्त करना// int vertical = (faces[i].y + faces[i].width * 0.5);//निर्देशांक का लंबवत मान प्राप्त करना// } cout << "Position of the face is at(x,y)=" << " ("<<CAP_PROP_XI_DECIMATION_HORIZONTAL<<","<<CAP_PROP_XI_DECIMATION_VERTICAL<<")"<< endl;// imshow("Face Detection", image_with_humanface);//सबसे बड़ा चेहरा दिखाना// waitKey(0);//प्रोग्राम समाप्त करने के लिए कीस्ट्रोक की प्रतीक्षा करना return 0; }आउटपुट
