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();
相关推荐
云空3 小时前
《洪水应急场景下基于 YOLOv8 的目标检测与实例分割模型训练方案》
人工智能·yolo·计算机视觉
dreamread3 小时前
2026起名参考八字排盘工具怎么选:看五行提示、候选记录和理性边界
人工智能·软件工具·传统文化
写代码像蔡徐抻3 小时前
从外星人到大模型,语言如何泄露了人类的思维方式。
人工智能
云烟成雨TD3 小时前
LangFlow 1.x 系列【7】工作流创建与部署指南
人工智能·python·agent
GAOJ_K3 小时前
高速工况钢珠离心力如何影响螺杆磨损与运行平顺性?
人工智能·无人机·制造
VIP_CQCRE4 小时前
用 Ace Data Cloud 快速接入 Kling Motion:让图片按指定动作生成视频
人工智能·api·ai视频·kling·acedatacloud
namexingyun4 小时前
Scaling Law bug实战启示:从“虚胖“到“精瘦“的算力效率革命
开发语言·网络·人工智能·bug·ai编程
KaMeidebaby4 小时前
卡梅德生物技术快报|纳米抗体技术全套实操流程:AFB1 全合成文库淘选 + 分子对接定点突变参数手册
人工智能·python·tcp/ip·算法·机器学习
阿拉斯攀登4 小时前
音视频采集:getUserMedia 与设备管理
音视频·webrtc·实时音视频·视频编解码