【问题标题】:iterate over frames of video in openCV java在openCV java中迭代视频帧
【发布时间】:2014-02-20 10:21:19
【问题描述】:

我正在尝试在 openCV java 中循环播放帧视频 这是我的代码

    Mat frame = new Mat();
    int numOfFrames = 0;
    boolean hasNext = true;
    while(hasNext){
        hasNext = video.read(frame);
        numOfFrames++;
    }

问题是,它永远循环,没有结果、错误或内存泄漏! 请帮忙

【问题讨论】:

  • 您是从视频文件中读取还是从相机中捕获?
  • 是的,lukk 说的。相机流只是从不停止
  • 从视频文件中读取
  • 您是否等待足够长的时间到达文件末尾?也许文件太大以至于需要花费大量时间。如果您的处理速率约为 200fps,则以 25fps(90000 帧)解码 1 小时视频需要 7.5 分钟才能完成。
  • 其实我正在尝试 4 秒视频

标签: java opencv video frame


【解决方案1】:

您编写的 while 循环需要某种类型的条件来中断循环。由于代码现在是 while 循环显然永远循环。

因此,例如,您可以执行类似的操作来避免无限循环。

    boolean hasNext = true;
    while(hasNext) { 
        hasNext = video.read(frame);
        numOfFrames++;

        if(numOfFrames == 100) { 
              break;  // calling this will break out of the loop
        }
   } // end while loop

或者您可以简单地添加一个break;,但它只会迭代一次。也许 for 循环是更好的选择? :D

希望这会有所帮助。

很酷,OpenCV 有一个 java 包装器。我在一本 C 编程书籍中看到过这个程序。

【讨论】:

  • 嗯,她可能想要电影的结尾,而不是随便一个数字来拯救......
  • 也许这是用于break的条件?
  • @berak 检查找到视频结尾的条件是什么? :D
  • 嗯,我在 3.0 上,而正是 发生在这里。视频(来自文件)结束,capture.read(帧);返回假。莎拉似乎在抱怨,事情并没有像预期的那样发生..
  • 如果video.read(frame); 永远不会返回false,您可能有条件停止程序?
猜你喜欢
  • 1970-01-01
  • 2013-03-15
  • 2019-12-31
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 2015-05-20
相关资源
最近更新 更多