যখন আমরা চেহারার অবস্থান ট্র্যাক করতে চাই, তবে চেহারাকে এলিপ্স দিয়ে ঘেরা ভালো কারণ এলিপ্সের একটি কেন্দ্র থাকে। এই কেন্দ্রই সনাক্ত চেহারার কেন্দ্র বিন্দু। ফলে, সনাক্ত চেহারার অবস্থান ট্র্যাক করা আরও সঠিক হয়।
সনাক্ত চেহারার কেন্দ্র ট্র্যাক করে কনসোল উইন্ডোতে অবস্থান দেখানোর প্রোগ্রাম
#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_SCALE_IMAGE, Size(20, 20)); // 'image_with_humanface' ম্যাট্রিক্সে চেহারা সনাক্তকরণ
for (int i = 0; i < faces.size(); i++) { // সবচেয়ে বড় চেহারা সনাক্ত করার জন্য লুপ
Point center(faces[i].x + faces[i].width * 0.5, faces[i].y + faces[i].height * 0.5); // চেহারার কেন্দ্র
ellipse(image_with_humanface, center, Size(faces[i].width * 0.5, faces[i].height * 0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0); // চেহারার ওপর এলিপ্স আঁকা
int horizontal = (faces[i].x + faces[i].width * 0.5); // কো-অর্ডিনেটের আড়াঘাত মান
int vertical = (faces[i].y + faces[i].width * 0.5); // কো-অর্ডিনেটের লম্বাঘাত মান
}
cout << "Position of the face is at(x,y)= " << " (" << CAP_PROP_XI_DECIMATION_HORIZONTAL << "," << CAP_PROP_XI_DECIMATION_VERTICAL << ")" << endl;
imshow("Face Detection", image_with_humanface); // সবচেয়ে বড় চেহারা দেখানো
waitKey(0); // প্রোগ্রাম টার্মিনেট করার জন্য কীস্ট্রোক অপেক্ষা
return 0;
}
আউটপুট
