Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

OpenCV में C++ का उपयोग करके सबसे बड़े चेहरे का पता लगाएं


हम केवल सबसे बड़े चेहरे का पता लगाना सीखेंगे। यह विषय पिछले विषय के समान है। एकमात्र अंतर यह है कि हमने सबसे बड़े चेहरे का पता लगाने के लिए एक अतिरिक्त '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; }

आउटपुट

OpenCV में C++ का उपयोग करके सबसे बड़े चेहरे का पता लगाएं


  1. OpenCV में C++ का उपयोग करके दीर्घवृत्त कैसे बनाएं? OpenCV में C++ का उपयोग करके दीर्घवृत्त कैसे बनाएं?

    दीर्घवृत्त बनाने के लिए, हमें एक केंद्र, प्रमुख अक्ष और लघु अक्ष की आवश्यकता होती है। इसका मतलब है कि हमें दीर्घवृत्त के लिए तीन पैरामीटर चाहिए। हमें एक मैट्रिक्स चाहिए जहां हम दीर्घवृत्त बनाएंगे, और हमें लाइन की मोटाई और लाइन का रंग घोषित करना होगा। जब हम OpenCV का उपयोग करके दीर्घवृत्त बनाना चाहते

  1. OpenCV में C++ का उपयोग करके रेखा कैसे बनाएं? OpenCV में C++ का उपयोग करके रेखा कैसे बनाएं?

    रेखा बनाने के लिए हमें दो बिंदुओं की आवश्यकता होती है - प्रारंभिक बिंदु और अंतिम बिंदु। हमें रेखा खींचने के लिए एक कैनवास की भी आवश्यकता होती है। OpenCV का उपयोग करके, मैट्रिक्स हमारा कैनवास है, हमें रेखा के प्रारंभिक और अंतिम बिंदुओं को परिभाषित करने की आवश्यकता होती है। हमें रेखा को एक रंग निर्दिष

  1. OpenCV में C++ का उपयोग करके इमेज के चैनलों की संख्या कैसे गिनें? OpenCV में C++ का उपयोग करके इमेज के चैनलों की संख्या कैसे गिनें?

    इस विषय में, हम समझेंगे कि इमेज के चैनलों की संख्या कैसे पता करें। प्रोग्राम चलाने के बाद, चैनलों की संख्या कंसोल विंडो में दिखाई जाएगी। चैनलों की संख्या प्राप्त करने के लिए, हमने OpenCV की channels() नामक एक क्लास का उपयोग किया है। जब हम इमेज मैट्रिक्स को channels() क्लास के ऑब्जेक्ट के रूप में पास