为什么在 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 使用率峰值。
我用的是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 使用率峰值。