हम केवल सबसे बड़े चेहरे का पता लगाना सीखेंगे। यह विषय पिछले विषय के समान है। एकमात्र अंतर यह है कि हमने सबसे बड़े चेहरे का पता लगाने के लिए एक अतिरिक्त 'Rect' संरचना और एक 'for loop' का उपयोग किया।
इस फंक्शन का वास्तविक प्रारूप -
Mat faceROI = image_with_humanface(maxRect)
maxRect में स्थित सबसे बड़े चेहरे का क्षेत्र और स्थान जानकारी होती है। ऊपर दी गई लाइन 'image_with_humanface' पर स्थित उसी क्षेत्र को क्रॉप कर रही है जहां सबसे बड़ा चेहरा छवि पर स्थित है और 'faceROI' मैट्रिक्स में संग्रहीत कर रही है।
स्थिर चित्रों से सबसे बड़े चेहरे का पता लगाने के लिए निम्नलिखित प्रोग्राम -
उदाहरण
#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_FIND_BIGGEST_OBJECT);//'image_with_humanfaces' मैट्रिक्स में चेहरों का पता लगाना// Rect maxRect;//एक आयत घोषित करना। डिफ़ॉल्ट रूप से आकार शून्य पिक्सेल है// for (int i = 0; i < faces.size(); i++){ //सबसे बड़े चेहरे का पता लगाने के लिए लूप शुरू करना// if (faces[i].area() > maxRect.area()){ //चेहरे का क्षेत्रफल गणना करना और इसकी तुलना maxRect के क्षेत्रफल से करना// maxRect = faces[i];//सबसे बड़े चेहरे के आकार के अनुसार सबसे बड़ा आयत MaxRect में संग्रहीत करना// } } for (size_t i = 0; i < faces.size(); i++){ //चेहरे के चारों ओर आयत बनाने के लिए लूप// Mat faceROI = image_with_humanface(maxRect);//maxRect के बराबर आकार वाले मैट्रिक्स में चेहरा संग्रहीत करना// int x = maxRect.x;//चेहरे के आयत के प्रारंभिक बिंदु की प्रारंभिक पंक्ति मान प्राप्त करना// int y = maxRect.y;//चेहरे के आयत के प्रारंभिक बिंदु की प्रारंभिक कॉलम मान प्राप्त करना// int h = y + maxRect.height;//आयत की ऊंचाई की गणना करना// int w = x + maxRect.width;//आयत की चौड़ाई की गणना करना// rectangle(image_with_humanface, Point(x, y), Point(w, h), Scalar(255, 0, 255), 3, 6, 0);//सबसे बड़े चेहरे के चारों ओर आयत बनाना// } imshow("Face Detection",image_with_humanface);//सबसे बड़ा चेहरा दिखाना// waitKey(0);//प्रोग्राम समाप्त करने के लिए कीस्ट्रोक की प्रतीक्षा करना return 0; }आउटपुट
