python - 为什么在 C++ 上使用 OpenCV 时的 CPU 使用率比在 Python 上高

标签 python c++ performance opencv cpu

我使用的是Ubuntu 20.04.4,并且我将OpenCV编译为 Release模式。每当我读取帧时,它都会消耗大量的 CPU。我也在其他机器上测试过这一点。然而,在 python 上使用非常相似的脚本,它使用的 CPU 少得多。我发现this问题似乎与我的问题类似。虽然我使用的是Release版本。

此外,我的 python 似乎使用与我编译的版本相同的 OpenCV 版本:4.5.5

这是C++测试代码:

#include "opencv2/opencv.hpp"

int main(){
    cv::VideoCapture vo = cv::VideoCapture(2);
    //Set fourc for better performance.
    vo.set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M','J','P','G'));
    vo.set(cv::CAP_PROP_FPS,30);
    //Setting buffersize to one will make vi.read() blocking until next frame is available.
    vo.set(cv::CAP_PROP_BUFFERSIZE,1);
    vo.set(cv::CAP_PROP_FRAME_WIDTH,1920);
    vo.set(cv::CAP_PROP_FRAME_HEIGHT,1080); 
    cv::Mat frame;
    while (vo.isOpened())
    {
        vo.read(frame);
    }
    
}

以及Python代码:

import cv2

vo = cv2.VideoCapture(2)
vo.set(cv2.CAP_PROP_FPS,30)
vo.set(cv2.CAP_PROP_BUFFERSIZE,1)
vo.set(cv2.CAP_PROP_FRAME_WIDTH,1920)
vo.set(cv2.CAP_PROP_FRAME_HEIGHT,1080)

while(vo.isOpened()):
    ret, frame = vo.read()

Python 脚本消耗了大约 10% 的 CPU,而 C++ 消耗了大约 30%。我在 CPU 资源至关重要的环境中工作。我想知道是否有任何方法可以减少这种使用。我错过了什么吗?

最佳答案

感谢@ChristophRackwitz。显然,是 fourcc 配置导致了 CPU 使用率高。使用 1920x1080 的分辨率会将 FPS 限制为 5(使用默认的 YUYV 编码)。这可能就是我使用 python 获得较低 CPU 使用率的原因。 enter image description here

如果我将 python 上的 fourcc 设置为 MJPG,CPU 使用率会出现峰值。

关于python - 为什么在 C++ 上使用 OpenCV 时的 CPU 使用率比在 Python 上高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71697593/

相关文章:

JavaScript 对象性能

ios - swift 与 Objective-C : App performance

python - 如何在 .wav 文件末尾添加几秒的静音?

python - 属性错误 : (Class) object has no attribute '__name__' Creating ModelForms [Django & Python2. 7]

c++ - OpenGL 应用程序代码在不同操作系统之间的可移植性

c++ - 链接器错误(VS 2005 与 VS 2012)

c++ - 打印函数到输出文件

python - 为什么我会收到 "unwanted"日志条目?

python - 使用 python 将嵌套 BigQuery 数据导出到云存储

mysql - 如何加快 MariaDB 中数据子集的选择