কম্পিউটার টিউটোরিয়াল

OpenCV-এ C++ ব্যবহার করে সবচেয়ে বড় চেহারা সনাক্ত করা

আমরা শিখব কিভাবে শুধু সবচেয়ে বড় চেহারা সনাক্ত করতে হয়। এই বিষয়টি পূর্বের বিষয়ের মতোই। একমাত্র পার্থক্য হলো আমরা সাবচেয়ে বড় চেহারা সনাক্ত করতে একটি অতিরিক্ত 'Rect' স্ট্রাকচার এবং একটি 'for loop' ব্যবহার করেছি।

এই ফাংশনের আসল ফরম্যাট:

Mat faceROI = image_with_humanface(maxRect)

maxRect-এ সবচেয়ে বড় চেহারার এলাকা এবং অবস্থানের তথ্য থাকে। উপরের লাইনটি 'image_with_humanface'-এ maxRect-এ সংরক্ষিত এলাকাটি একই অবস্থানে ক্রপ করে 'faceROI' ম্যাট্রিক্সে সংরক্ষণ করে।

স্টিল ছবি থেকে সবচেয়ে বড় চেহারা সনাক্ত করার প্রোগ্রাম

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp> // 'rectangle()' ফাংশনের সংজ্ঞা এই হেডারে
#include<opencv2/objdetect/objdetect.hpp> // ক্যাসকেড ক্লাসিফায়ারের সংজ্ঞা এই হেডারে
#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; // চেহারার জন্য রেক্ট্যাঙ্গুলার ভেক্টর
    faceDetector.detectMultiScale(image_with_humanface, faces, 1.1, 4, CASCADE_FIND_BIGGEST_OBJECT); // 'image_with_humanface' ম্যাট্রিক্সে চেহারা সনাক্তকরণ
    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++ ব্যবহার করে নির্দিষ্ট পিক্সেলের মান পাওয়ার পদ্ধতি

  2. OpenCV-এ C++ ব্যবহার করে উপবৃত্ত আঁকা

  3. OpenCV-এ C++ ব্যবহার করে রেখা আঁকা

  4. OpenCV-এ C++ ব্যবহার করে ইমেজের চ্যানেল সংখ্যা গণনা করা