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

सी ++ का उपयोग कर ओपनसीवी में रीयल-टाइम में मानव चेहरों का पता कैसे लगाएं?

वास्तविक समय में चेहरे का पता लगाना स्थिर चित्रों में चेहरे का पता लगाने के समान है। केवल रीयल-टाइम फेस डिटेक्शन में अंतर है, और हमें कंप्यूटर का वीडियो स्ट्रीम लेना होगा। इस प्रोग्राम में हमने 'वीडियोकैप्चर ()' फंक्शन का इस्तेमाल किया। यह फ़ंक्शन अन्य कैमरे से वीडियो कैप्चर करता है और फ़्रेम को अस्थायी रूप से इसे सौंपे गए मैट्रिक्स में संग्रहीत करता है। यहां यह फ़ंक्शन डिफ़ॉल्ट कैमरे से वीडियो कैप्चर करता है और अस्थायी रूप से फ़्रेम को 'real_time' मैट्रिक्स में संग्रहीत करता है।

निम्न प्रोग्राम वास्तविक समय में मानवीय चेहरों का पता लगाता है -

उदाहरण

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
//This header includes definition of 'rectangle()' function//
#include<opencv2/objdetect/objdetect.hpp>
//This header includes the definition of Cascade Classifier//
#include<string>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
   Mat video_stream;//Declaring a matrix hold frames from video stream//
   VideoCapture real_time(0);//capturing video from default webcam//
   namedWindow("Face Detection");//Declaring an window to show the result//
   string trained_classifier_location = "C:/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml";//Defining the location our XML Trained Classifier in a string//
   CascadeClassifier faceDetector;//Declaring an object named 'face detector' of CascadeClassifier class//
   faceDetector.load(trained_classifier_location);//loading the XML trained classifier in the object//
   vector<Rect>faces;//Declaring a rectangular vector named faces//
   while (true) {
      faceDetector.detectMultiScale(video_stream, faces, 1.1, 4, CASCADE_SCALE_IMAGE, Size(30, 30));//Detecting the faces in 'image_with_humanfaces' matrix//
      real_time.read(video_stream);// reading frames from camera and loading them in 'video_stream' Matrix//
      for (int i = 0; i < faces.size(); i++){ //for locating the face
         Mat faceROI = video_stream(faces[i]);//Storing face in the matrix//
         int x = faces[i].x;//Getting the initial row value of face rectangle's starting point//
         int y = faces[i].y;//Getting the initial column value of face rectangle's starting point//
         int h = y + faces[i].height;//Calculating the height of the rectangle//
         int w = x + faces[i].width;//Calculating the width of the rectangle//
         rectangle(video_stream, Point(x, y), Point(w, h), Scalar(255, 0, 255), 2, 8, 0);//Drawing a rectangle using around the faces//
      }
      imshow("Face Detection", video_stream);
      //Showing the detected face//
      if (waitKey(10) == 27){ //wait time for each frame is 10 milliseconds//
         break;
      }
   }
   return 0;
}

आउटपुट

सी ++ का उपयोग कर ओपनसीवी में रीयल-टाइम में मानव चेहरों का पता कैसे लगाएं?


  1. सी ++ का उपयोग कर ओपनसीवी में बाइनरी छवि को कैसे पलटना है?

    बाइनरी इमेज को इनवर्ट करने का मतलब है पिक्सल वैल्यू को इनवर्ट करना। एक दृश्य परिप्रेक्ष्य से, जब हम एक बाइनरी छवि को उलटते हैं, तो सफेद पिक्सेल काले रंग में परिवर्तित हो जाएंगे, और काले पिक्सेल सफेद में परिवर्तित हो जाएंगे। इस फ़ंक्शन का मूल रूप है - cvtColor(original_image, grayscale_image, COLOR_

  1. सी ++ का उपयोग कर ओपनसीवी में बाइनरी छवि कैसे बनाएं?

    एक द्विआधारी छवि सिर्फ एक डिजिटल छवि है जो दो रंगों, काले और सफेद का प्रतिनिधित्व करती है। इमेज प्रोसेसिंग के नजरिए से, बाइनरी इमेज में दो संभावित मानों वाले पिक्सल होते हैं- शून्य और एक। जब पिक्सेल का मान 0 होता है, तो यह एक शुद्ध काले रंग का प्रतिनिधित्व करता है। जब पिक्सेल का मान 1 होता है, तो इस

  1. मैं नए का उपयोग करके C++ में 2d सरणी कैसे घोषित करूं?

    एक गतिशील 2D सरणी मूल रूप से सरणियों के लिए पॉइंटर्स की एक सरणी है। यहाँ एक 2D सरणी का आरेख है जिसका आयाम 3 x 4 है। एल्गोरिदम Begin    Declare dimension of the array.    Dynamic allocate 2D array a[][] using new.    Fill the array with the elements.    Print