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

Why the CPU usage is higher when using OpenCV on C++ than on Python

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

感谢@ChristophRackwitz。显然,正是 fourcc 配置导致 CPU 使用率过高。使用 1920x1080 的分辨率将使用默认 YUYV 编码将 FPS 限制为 5。这可能就是为什么我使用 python 的 CPU 使用率较低。

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