OpenCV中常见的视频方式是while循环读取,可是,当遇到嵌套循环呢

1、常见的while循环 ,没有嵌套循环

    cv::VideoCapture capture("d:/test/demo.avi");
    if (!capture.isOpened())
        return -1;
    bool status = true;  // 判断循环是否中止的布尔量
    cv::Mat frame;
    while (status)
    {
        capture >> frame;
        if (frame.empty())
            break;
        cv::imshow("video", frame);
        if (cv::waitKey(27) >= 0)
            status = false;
    }

2、当有嵌套循环时

    // 路径的话,可以用'\\'  也可以用'/'
    cv::VideoCapture capture(0);
    if (!capture.isOpened())
        return -1;
    cv::VideoCapture demoCapture("d:/test/demo.avi");
    if (!demoCapture.isOpened())
        return -2;

    // 获取对应视频文件的总帧数
    static int count = demoCapture.get(CV_CAP_PROP_FRAME_COUNT);
    bool status = true;  // 判断循环是否中止的布尔量
    cv::Mat frame;
    cv::Mat demoFrame;

    while(status)
    {
        capture >> frame;
        if (frame.empty())
            break;

        // 用来指定跳转帧的位置  static使之不会随着下次循环重新被赋值1
        // 在这个测试代码里面它可以被提出循环,考虑分模块编程的情况放到这里吧
        static int position = 1;  

        // 用什么作为循环判断条件,根据需求吧,不是唯一解
        while (position)
        {
            // 跳转到指定帧(第position帧)
            demoCapture.set(CV_CAP_PROP_POS_FRAMES, position);
            demoCapture >> demoFrame;
            if (demoFrame.empty())
                break;

            // 代码1开始
            // 这一块代码可以做好多种事情,
            // 比如说demoFrame和frame进行ROI操作
            ...
            // 代码1结束

            // 假如想让视频一遍结束继续播放,那就重置
            // 当然也可以根据需求更改
            if(position == count)
                position = 0;
            position++;

            if (cv::waitKey(27) >= 0)
                position = 0;
        }
    }

OpenCV 读取视频 多种方式的更多相关文章

  1. opencv 读取视频内容写入图片帧

    现在主要把自己平时用到的opencv功能记录到博客,一方面方便自己有时间来回顾,另一方便提供给大家一个参考. opencv 读取视频内容,把视频帧每一帧写成图片,存入电脑中.这个步骤是许多数据处理的基 ...

  2. Opencv读取视频

    CvCapture 是一个结构体,用来保存图像捕获所需要的信息. opencv提供两种方式从外部捕获图像 一种是从摄像头中, 一种是通过解码视频得到图像. 两种方式都必须从第一帧开始一帧一帧的按顺序获 ...

  3. 【计算机视觉】OpenCV读取视频获取时间戳等信息(PS:经测试并不是时间戳,与FFMPEG时间戳不一样)

    OpenCV中通过VideoCaptrue类对视频进行读取操作以及调用摄像头,下面是该类的API. 1.VideoCapture类的构造函数: C++: VideoCapture::VideoCapt ...

  4. C/C++ OpenCV读取视频与调用摄像头

    原文:http://blog.csdn.net/qq78442761/article/details/54173104 OpenCV通过VideoCapture类,来对视频进行读取,调用摄像头 读取视 ...

  5. Opencv读取视频一闪而过情况分析

    在参加一个软件比赛需要用opencv对视频的处理,也碰到了一些问题. 最常见的就是视频一闪而过了,在网上查了好久都没解决, 最后重装在配置环境变量时发现的. 现在我来终结一下估计是比较全的了. 先说明 ...

  6. python+opencv读取视频,调用摄像头

    引用 import cv2 import numpy 创建摄像头对象 cap = cv2.VideoCapture("videoTest/test1.mp4") #参数为视频文件目 ...

  7. 从HighGUI的一段代码中看OpenCV打开视频的方式

      OpenCV的HighGUI提供了视频和摄像头的直接打开.那么它是如何实现的了?这里进行初步分析.     ;    switch(apiPreference) {    default:    ...

  8. Linux OpenCV读取视频失败,cvCreateFileCapture失败的解决

    背景: 近期想在嵌入式平台上开发QT+Opencv,无料PC机上编写的OpenCV程序老是打不开视频. 開始提示:OpenCV Error: Bad argument (Array should be ...

  9. C++ 调用 opencv 读取视频文件列表并处理

    //g++ trans_video.cpp -o trans_video `pkg-config opencv --libs --cflags` -L/usr/lib/x86_64-linux-gnu ...

随机推荐

  1. touchmove Bug 工作遇到

    touchmove在安卓浏览器上只会触发一次,需要preventDefault() touchmove events in Android web browsers have a really ser ...

  2. HTML学习笔记 div布局及table布局案例 第三节 (原创)参考使用表

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 03.javabean

    一.javabean简介 1,  作用:一个可重用组件,在jsp开发中可减少重复代码,使HTML与JAVA代码分离便于日后维护. 2,  javabean类要求: 所有类必须放在包中,且为public ...

  4. python小小面试题

    一.python是如何进行内存管理的?Python引入了一个机制:引用计数.python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创 ...

  5. c#读取Excel数据到Gridview

    #region 读取Excel数据到Gridview public void ReadExcel(string sExcelFile, GridView dgBom)    { DataTable E ...

  6. [转载] su和sudo

    转载自http://www.cnblogs.com/haichuan3000/articles/2123633.html Mandriva 说也奇怪,用root登录的用户比一般用户还难用,当初用FC6 ...

  7. 使用sshkey的方式访问gitlab

    在使用jenkins创建jobs的时候配置git为ssh访问的方式报错 记录错误信息 Failed to connect to repository : Command "/usr/bin/ ...

  8. 使用face_recognition批量识别图片中的人数

    #使用face_recognition实现从图片中选中人数并分别输出txtimport face_recognition import cv2 import os fin = 'D:\\Users\\ ...

  9. DP 网易内推:合唱团

    链接:https://www.nowcoder.com/questionTerminal/661c49118ca241909add3a11c96408c8来源:牛客网 [编程题]合唱团 热度指数:18 ...

  10. 学习MySQL(下)

    具体实例 22.MySQL ALTER命令 当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令. 1.如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使 ...