opencv c++ nhận diện khuôn mặt camera
Nguồn: Chat GPT
Để nhận diện khuôn mặt camera và so sánh với khuôn mặt đã lưu trước đó, ta cần sử dụng haarcascade classifier của OpenCV.
Bước 1: Load haarcascade classifier vào chương trình:
luaCascadeClassifier faceCascade;
faceCascade.load("haarcascade_frontalface_alt.xml");
Bước 2: Load ảnh khuôn mặt đã lưu trước đó:
javaMat storedImage = imread("storedFace.jpg");
Bước 3: Sử dụng camera để capture khuôn mặt:
scssVideoCapture camera(0);
Mat frame;
camera >> frame;
Bước 4: Nhận diện khuôn mặt trong khung hình:
cstd::vector<Rect> faces;
faceCascade.detectMultiScale(frame, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));
Bước 5: So sánh khuôn mặt trong khung hình với khuôn mặt đã lưu trước đó:
scssfor (int i = 0; i < faces.size(); i++) {
Rect face = faces[i];
Mat faceROI = frame(face);
Mat storedFace;
resize(storedImage, storedFace, Size(face.width, face.height));
if (compareHist(calcHist(&faceROI), calcHist(&storedFace), CV_COMP_CORREL) >= 0.5) {
// Nếu khuôn mặt trong khung hình giống với khuôn mặt đã lưu, in ra thông báo
cout << "Matched!" << endl;
} else {
// Nếu không giống, in ra thông báo khác
cout << "Not Matched." << endl;
}
}
Như vậy, ta đã có được một chương trình nhận diện và so sánh khuôn mặt camera với khuôn mặt đã l
1
Để nhận diện khuôn mặt bằng camera trong OpenCV C++, bạn cần thực hiện các bước sau:
Khởi tạo camera: Sử dụng hàm VideoCapture để khởi tạo camera và lấy hình ảnh từ camera.
Load mô hình nhận diện khuôn mặt: Sử dụng hàm CascadeClassifier để tải mô hình nhận diện khuôn mặt từ file xml.
Nhận diện khuôn mặt: Sử dụng hàm detectMultiScale để nhận diện khuôn mặt trong hình ảnh.
Vẽ hình chữ nhật quanh khuôn mặt: Sử dụng hàm rectangle để vẽ hình chữ nhật quanh khuôn mặt được nhận diện.
Hiển thị kết quả: Sử dụng hàm imshow để hiển thị hình ảnh với khuôn mặt được nhận diện.
Mã code cho việc nhận diện khuôn mặt bằng camera trong OpenCV C++:
#include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/objdetect/objdetect.hpp> using namespace cv; using namespace std; int main() { VideoCapture cap(0); // khởi tạo camera if (!cap.isOpened()) { cout << "Cannot open the video cam" << endl; return -1; } CascadeClassifier face_cascade; face_cascade.load("haarcascade_frontalface_default.xml"); while (true) { Mat frame; cap >> frame; if (frame.empty()) break; Mat frame_gray; cvtColor(frame, frame_gray, COLOR_BGR
Comments
Post a Comment