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();
相关推荐
霸道流氓气质13 小时前
SpringBoot中集成LangChain4j+阿里百炼平台实现AI对话记忆功能、对话隔离、对话持久化到Redis功能
人工智能·spring boot·redis
@不误正业13 小时前
大模型注意力机制源码解析-从MQA到MLA全链路演进与PyTorch实现
人工智能·pytorch·python
come1123413 小时前
最新的 gpt 5.4 和 claude 4.7 模型为什么更好用
人工智能·gpt
WYiQIU13 小时前
宇树科技Web前端岗(AI方向),这不算泄题吧......
前端·vue.js·人工智能·笔记·科技·面试·职场和发展
Li emily13 小时前
外汇api接口实践:实时汇率与历史数据获取
人工智能·python·api·fastapi
甄心爱学习13 小时前
【项目实训】法律文书智能摘要系统3
前端·人工智能
TheRouter14 小时前
AI 不会消灭软件工程,它只会消灭低维的软件工程
人工智能·软件工程
冲浪中台14 小时前
从追逐技术到回归业务本质,吃互联网红利罢了
服务器·前端·人工智能·低代码
3DVisionary14 小时前
升维洞察:DIC全场视觉检测如何重塑力学测试的“时空秩序”
人工智能·计算机视觉·视觉检测·动态测量·dic技术·xtdic·结构疲劳演化
做个文艺程序员14 小时前
Claude Skill 进阶:多文件结构、脚本集成与触发优化
人工智能·python·开源