首页 > 解决方案 > OpenCV - 回放 CPU 使用率

问题描述

我正在研究需要在两个方向(向前或向后)播放两个录制的视频的项目。

两个视频均使用 H.264 编码并行录制。

我使用 OpenCV 3.2.0 在 C++ 中编写了一个非常简单的代码(见下文):

为了控制播放方向,我定义了两个标志(“ play_left_backward ”、“ play_right_backward ” )

如果我将两个标志都设置为“false”,则代码运行使用的 CPU 不到 1%。

如果我只将其中一个标志设置为“true”,则代码运行时会使用大约 2% 的 CPU。

但是,如果我将两个标志都设置为“true”,则代码会使用28%的 CPU 运行。

我无法理解这种奇怪行为的原因。

有人有什么解释吗?

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

int main() {

   bool play_left_backward = true;
   bool play_right_backward = true;

   cv::Mat frame_left;
   cv::Mat frame_right;

   cv::VideoCapture cap_left("D:\\record_left.avi");
   cv::VideoCapture cap_right("D:\\record_right.avi");

   // amount of frames
   int N = (int)cap_left.get(7);

   for (int i = 0; i < N; i++) {

       if (play_left_backward == true) {
          cap_left.set(1, N - i - 1);
       }

       if (play_right_backward == true) {
          cap_right.set(1, N - i - 1);
       }

       cap_left >> frame_left;
       cap_right >> frame_right;

       cv::imshow("Frame left", frame_left);
       cv::imshow("Frame right", frame_right);

       char c = (char)cv::waitKey(30);
       if (c == 27) {
          break;
       }

   }

  return 0;
}

谢谢

标签: c++opencvh.264

解决方案


推荐阅读