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();
相关推荐
cczixun22 分钟前
从工具交互到自主进化:2026智能体平台产业发展全景解析
人工智能·智能体
benchmark_cc38 分钟前
1000只ETF的5分钟K线如何批量获取?QuantDash分页策略与高性能Python实践
开发语言·人工智能·爬虫·python·算法·quantdash·量化数据源
sel_91 小时前
【PEFT】参数高效微调(PEFT)技术详解:从原理到 LoRA/QLoRA 实战
人工智能·python·深度学习·算法·机器学习·参数高效微调
机器人猎头David1 小时前
机器人猎头公司(倍利福猎头公司)案例分享
人工智能·机器人·招聘·具身智能·人形机器人·猎头公司·机器人猎头公司
月光船幽幽1 小时前
带刺反馈引擎:唤醒深层意图
人工智能·python
weixin_446260851 小时前
什么样的智能体数据才算优质?——基于ACE视角的大语言模型智能体数据生成研究
人工智能·语言模型·自然语言处理
我是大AI1 小时前
RAG架构下的品牌可见性革命:GEO监测技术解析与搜极星实践
人工智能·架构
大模型码小白1 小时前
AI 提示词专栏:使用系统指令(System Prompt)实现全局约束
java·大数据·运维·开发语言·人工智能·python·prompt
土星云SaturnCloud1 小时前
超轻量 OCR 实战:PP-OCR 边缘部署实践
服务器·人工智能·ai·ocr·边缘计算