opencv视频读写

需要使用VideoCapture类

读取mp4文件

cpp 复制代码
cv::VideoCapture vcapture("chouyan2.mp4");
    if (vcapture.isOpened()) {
        while (vcapture.grab()) {// 直接从视频文件或者设备捕获中抓取帧
            cv::Mat myFrame;
            //vcapture >> myFrame; // 将视频中的数据流向Mat
            if (vcapture.read(myFrame)) {
                cv::imshow("读取mp4视频文件", myFrame);
                cv::waitKey(40);
            }
        }
    }
    vcapture.release();

读取rtsp流并且按下空格键保存图片

修改文件名即可

cpp 复制代码
cv::VideoCapture vcapture("rtsp://admin:Admin123@192.168.101.234");
    int picNum{ 0 };
    if (vcapture.isOpened()) {
        while (vcapture.grab()) {// 直接从视频文件或者设备捕获中抓取帧
            cv::Mat myFrame;
            //vcapture >> myFrame; // 将视频中的数据流向Mat
            if (vcapture.read(myFrame)) {
                cv::imshow("读取rtsp视频文件", myFrame);
                if (cv::waitKey(20) == 32) {
                    std::string picName = std::to_string(picNum) + ".jpg";
                    cv::imwrite(picName.c_str(), myFrame);
                    picNum++;
                }
            }
        }
    }
    vcapture.release();

编码生成视频文件

cpp 复制代码
cv::VideoCapture vcapture("rtsp://admin:Admin123@192.168.101.234");
    cv::VideoWriter vcwriter("test.mp4", cv::VideoWriter::fourcc('X', '2', '6', '4'), 25
            , cv::Size(vcapture.get(cv::CAP_PROP_FRAME_WIDTH), vcapture.get(cv::CAP_PROP_FRAME_HEIGHT)), true);
    int picNum{ 0 };
    if (vcapture.isOpened()) {
        while (vcapture.grab()) {// 直接从视频文件或者设备捕获中抓取帧
            cv::Mat myFrame;
            //vcapture >> myFrame; // 将视频中的数据流向Mat
            if (vcapture.read(myFrame)) {
                drawrectangle(myFrame);
                cv::imshow("读取rtsp视频文件", myFrame);
                int key = cv::waitKey(20);
                if (key == 32) {
                    std::string picName = std::to_string(picNum) + ".jpg";
                    cv::imwrite(picName.c_str(), myFrame);
                    picNum++;
                    break;
                } else if (key == 'q') {
                    break;
                }
                vcwriter.write(myFrame);
            }
        }
    }
    vcapture.release();
    vcwriter.release();
相关推荐
DeniuHe2 分钟前
遗传算法中的轮盘赌选择法(Roulette Wheel Selection)
人工智能
星辰徐哥7 分钟前
表单优化:AI驱动HTML5表单的智能验证与提示功能
前端·人工智能·html5
这张生成的图像能检测吗12 分钟前
(论文速读)Shift:通过减少概念漂移解决时间序列预测泛化问题
人工智能·深度学习·transformer·时序模型
bzmK1DTbd21 分钟前
Java在人工智能:TensorFlow Java API的使用
java·人工智能·tensorflow
wangqiaowq25 分钟前
模型合并,转换,量化压缩,部署
人工智能·深度学习
Michaelwubo35 分钟前
openspec业务SDD驱动开发
人工智能·vibe code
GEO索引未来40 分钟前
大胆预测:国家会这样对GEO行业进行监管
大数据·人工智能·gpt·ai·chatgpt
闵孚龙41 分钟前
Prompt工程到底怎么做?从“会提问”到“能落地”的完整方法论
人工智能·prompt
AI人工智能+42 分钟前
文档抽取系统通过OCR与大语言模型融合技术,将非结构化文档(如合同、保单、表格)自动转换为结构化数据
人工智能·语言模型·ocr·文档抽取