七、OpenCV中的视频的读写

文章目录

一、视频的播放

cpp 复制代码
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {
    // 打开默认摄像头(0 表示第一个摄像头)
    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) { // ESC 退出
            break;
        } else if (key == 32) { // 空格键拍照
            string filename = "photo_" + to_string(imgCount++) + ".jpg";
            imwrite(filename, frame);
            cout << "已保存: " << filename << endl;
        }
    }

    cap.release();
    destroyAllWindows();
    return 0;
}

二、打开摄像头,并拍照

cpp 复制代码
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {
    // 打开默认摄像头(0 表示第一个摄像头)
    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) { // ESC 退出
            break;
        } else if (key == 32) { // 空格键拍照
            string filename = "photo_" + to_string(imgCount++) + ".jpg";
            imwrite(filename, frame);
            cout << "已保存: " << filename << endl;
        }
    }

    cap.release();
    destroyAllWindows();
    return 0;
}

三、人脸检测 + 自动拍照(检测到人脸时保存照片)

cpp 复制代码
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {
    // 加载人脸分类器(OpenCV 自带的 XML 文件)
    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);

        // 按 ESC 退出
        if (waitKey(30) == 27) break;
    }

    cap.release();
    destroyAllWindows();
    return 0;
}
相关推荐
小保CPP4 小时前
OpenCV C++基于AI模型的场景文本识别(OCR)
c++·人工智能·opencv·计算机视觉·ocr
程序员正茂2 天前
Android studio中初步使用OpenCV库
android·opencv
小保CPP2 天前
OpenCV C++将多张图像合并为webp动图
c++·人工智能·opencv·计算机视觉
小保CPP2 天前
OpenCV C++提取webp动图里的图片
c++·人工智能·opencv·计算机视觉
深度研习笔记3 天前
OpenCV工业视觉实战11|多线程解耦+视频流稳流+推理加速,彻底解决卡顿阻塞,实现毫秒级工业实时检测
人工智能·opencv·计算机视觉
深度研习笔记3 天前
OpenCV工业视觉进阶14|SQLite违规数据库存储+历史记录查询+Excel报表导出,完成项目商用数据闭环(验收必备)
数据库·opencv·sqlite
C++ 老炮儿的技术栈4 天前
OpenCV 实现社保卡透视矫正:Hough 直线提取四角并转正证件图像
c语言·c++·人工智能·opencv·算法·计算机视觉·c
深度研习笔记4 天前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
深度研习笔记4 天前
OpenCV工业视觉实战06|ROI区域截取+局部精细化检测,锁定作业区域、屏蔽无效背景,大幅提升YOLO检测准确率
人工智能·opencv·yolo
fai厅的秃头姐!4 天前
OpenCV-基础篇
人工智能·opencv·计算机视觉