文章目录
- 一、视频的播放
- 二、打开摄像头,并拍照
- 三、人脸检测 + 自动拍照(检测到人脸时保存照片)
一、视频的播放
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main() {VideoCapture cap(0);if (!cap.isOpened()) {cerr << "无法打开摄像头!" << endl;return -1;}double fps = cap.get(CAP_PROP_FPS);cout << "Camera FPS: " << fps << endl;Mat frame;int imgCount = 0;while (true) {cap >> frame; if (frame.empty()) {cerr << "无法获取摄像头图像!" << endl;break;}imshow("Camera", frame);int key = waitKey(30);if (key == 27) { break;} else if (key == 32) { string filename = "photo_" + to_string(imgCount++) + ".jpg";imwrite(filename, frame);cout << "已保存: " << filename << endl;}}cap.release();destroyAllWindows();return 0;
}
二、打开摄像头,并拍照
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main() {VideoCapture cap(0);if (!cap.isOpened()) {cerr << "无法打开摄像头!" << endl;return -1;}double fps = cap.get(CAP_PROP_FPS);cout << "Camera FPS: " << fps << endl;Mat frame;int imgCount = 0;while (true) {cap >> frame; if (frame.empty()) {cerr << "无法获取摄像头图像!" << endl;break;}imshow("Camera", frame);int key = waitKey(30);if (key == 27) { break;} else if (key == 32) { string filename = "photo_" + to_string(imgCount++) + ".jpg";imwrite(filename, frame);cout << "已保存: " << filename << endl;}}cap.release();destroyAllWindows();return 0;
}
三、人脸检测 + 自动拍照(检测到人脸时保存照片)
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main() {CascadeClassifier face_cascade;if (!face_cascade.load("haarcascade_frontalface_default.xml")) {cerr << "无法加载人脸检测模型!" << endl;return -1;}VideoCapture cap(0);if (!cap.isOpened()) {cerr << "无法打开摄像头!" << endl;return -1;}Mat frame, gray;while (true) {cap >> frame;if (frame.empty()) break;cvtColor(frame, gray, COLOR_BGR2GRAY);equalizeHist(gray, gray); vector<Rect> faces;face_cascade.detectMultiScale(gray, faces,1.1, 3, 0, Size(30, 30) );for (size_t i = 0; i < faces.size(); i++) {rectangle(frame, faces[i], Scalar(0, 255, 0), 2); }imshow("Face Detection", frame);if (waitKey(30) == 27) break;}cap.release();destroyAllWindows();return 0;
}