弹出的一件事是,您正在创建一个新窗口,并在每次要显示内容时调整其大小。
我想显示FHD实时流(25 fps)并覆盖一些(变化中的)文本。为此,我基本上使用下面的代码。
基本上是
cv::putText
在这里跳过)delay
的倍数,则显示框架但是代码比起例如mpv
并占用大量CPU时间(cv::useOptimized() == true
)。
到目前为止,delay
是我在某种程度上使它变得不方便的提琴参数。
delay == 1
导致180%CPU使用率(全帧速率)delay == 5
导致80%的CPU使用率但是delay == 5
或5 fps确实很慢,实际上cpu负载仍然太大。
不使用如何使此代码更快或更佳,或者解决任务(我不受opencv的约束?)>]
P.s。
cv::imshow
的情况下,与delay
无关,CPU使用率均小于30%。#include <opencv2/opencv.hpp>
#include <X11/Xlib.h>
// process ever delayth frame
#define delay 5
Display* disp = XOpenDisplay(NULL);
Screen* scrn = DefaultScreenOfDisplay(disp);
int screen_height = scrn->height;
int screen_width = scrn->width;
int main(int argc, char** argv){
int image_width, image_height
cv::VideoCapture cap("rtsp://url");
cv::Mat frame;
if (cap.isOpened()){
cap.read(frame);
image_width = frame.cols;
image_height = frame.rows;
}
cv::namedWindow( "PREVIEW", cv::WINDOW_NORMAL );
cv::resizeWindow( "PREVIEW", screen_width, screen_height );
int framecounter = 0;
while (true){
if (cap.isOpened()){
cap.read(frame);
framecounter += 1;
// Display only delay'th frame
if (framecounter % delay == 0){
/*
* cv::putText
*/
framecounter = 0;
cv::imshow("PREVIEW", frame);
}
}
cv::waitKey(1);
}
}
我想显示FHD实时流(25 fps)并覆盖一些(变化中的)文本。为此,我基本上使用下面的代码。基本上是Load frame(在这里跳过cv :: putText)如果是...,则显示框架...] >>
弹出的一件事是,您正在创建一个新窗口,并在每次要显示内容时调整其大小。
移动这些行
cv::namedWindow( "PREVIEW", cv::WINDOW_NORMAL );
cv::resizeWindow( "PREVIEW", screen_width, screen_height );
到您的while(true)
之前,然后查看它可以解决此问题
弹出的一件事是,您正在创建一个新窗口,并在每次要显示内容时调整其大小。