我使用的是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 使用率的原因。
如果我将 python 上的 fourcc 设置为 MJPG
,CPU 使用率会出现峰值。
关于python - 为什么在 C++ 上使用 OpenCV 时的 CPU 使用率比在 Python 上高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71697593/