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

सी ++ का उपयोग कर ओपनसीवी में आंख का पता कैसे लगाएं?

यहां, हम सीखेंगे कि ओपनसीवी में आंख का पता कैसे लगाया जाए। हम आंखों का पता लगाने के लिए 'C:/opencv/sources/data/haarcascades' में स्थित haarcascade_eye.xml क्लासिफायर का उपयोग करेंगे। आंखों का पता लगाने के लिए, हमें इन शीर्षलेखों को जोड़ना होगा।

पहला हैडर है, और यह C++ प्रोग्रामिंग लैंग्वेज का हैडर है। रीडिंग राइटिंग इमेज और यूजर इंटरफेस फंक्शंस को 'हाईगुई' हेडर में परिभाषित किया गया है। हमें छवि गुणवत्ता बढ़ाने के लिए 'imgproc' हेडर जोड़ने की आवश्यकता है, और हम चेहरे और आंखों का पता लगाने के लिए 'objdetect' हेडर का भी उपयोग करते हैं।

OpenCV में आंख का पता लगाने और उसे ट्रैक करने का तरीका दिखाने के लिए निम्न प्रोग्राम।

उदाहरण

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/objdetect/objdetect.hpp>
using namespace cv;
using namespace std;
int main() {
   Mat frame;//declaring a matrix to video frame in it//
   namedWindow("Detect");//Declaring a window to show our work//
   VideoCapture image(0);//capturing video from default camera//
   if (!image.isOpened()){ //Error message if video source is not found//
      cout << "Couldn't load video from the source.Make sure your camera is working properly." << endl;
      system("pause");
      return 0;
   }
   double height = image.set(CAP_PROP_FRAME_HEIGHT, 480);//setting up height of each frame//
   double width = image.set(CAP_PROP_FRAME_WIDTH, 640);//setting up width of each frame//
   CascadeClassifier face_cascade, eyes_cascade;//declaring a CascadeClassifier object//
   face_cascade.load("C:/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml");//loading the cascade classifier//
   eyes_cascade.load("C:/opencv/sources/data/haarcascades/haarcascade_eye.xml");
   while (true) {
      bool temp = image.read(frame);//loading video frames from source to our matrix named frame//
      vector<Rect>faces;//Declaring a vector named faces//
      face_cascade.detectMultiScale(frame, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(100, 100));//detecting the face
      for (int i = 0; i < faces.size(); i++){ //for locating the face
         Point center(faces[i].x + faces[i].width * 0.5, faces[i].y + faces[i].height * 0.5);//getting the center of the face//
         ellipse(frame, center, Size(faces[i].width * 0.5, faces[i].height * 0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);//draw an ellipse on the face//
         Mat faceROI = frame(faces[i]);//Taking area of the face as Region of Interest for eyes//
         vectoreyes;//declaring a vector named eyes//
         eyes_cascade.detectMultiScale(faceROI, eyes, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(5, 5));//detect eyes in every face//
         for (size_t j = 0; j < eyes.size(); j++){ //for locating eyes//
            Point center(faces[i].x + eyes[j].x + eyes[j].width * 0.5, faces[i].y + eyes[j].y + eyes[j].height * 0.5);//getting the centers of both eyes//
            int radius = cvRound((eyes[j].width + eyes[j].height) * 0.25);//declaring radius of the eye enclosing circles//
            circle(frame, center, radius, Scalar(255, 0, 0), 4, 8, 0);//drawing circle around both eyes//
         }
      }
      imshow("Detect", frame);//showing result in window named 'Detect'//
      if (waitKey(30) == 27){ //wait time for each frame is 30 milliseconds//
         break;
      }
   }
   return 0;
}

आउटपुट

सी ++ का उपयोग कर ओपनसीवी में आंख का पता कैसे लगाएं?


  1. सी ++ का उपयोग कर ओपनसीवी में अंडाकार कैसे आकर्षित करें?

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

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

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

  1. सी ++ का उपयोग कर ओपनसीवी में किसी छवि के चैनलों की संख्या की गणना कैसे करें?

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