- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想显示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负载仍然太大。
How can I make this code faster or otherwise better or otherwise solve the task (I'm not bound to opencv)?
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){
cv::VideoCapture cap("rtsp://url");
cv::Mat frame;
if (cap.isOpened())
cap.read(frame);
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);
}
}
最佳答案
现在,我发现了有关 valgrind
(存储库)和 gprof2dot
(pip3 install --user gprof2dot
)的信息:
valgrind --tool=callgrind /path/to/my/binary # Produced file callgrind.out.157532
gprof2dot --format=callgrind --output=out.dot callgrind.out.157532
dot -Tpdf out.dot -o graph.pdf
cvResize
上蒸发了。
cv::resizeWindow
时,CPU使用率从180%降低到〜60%。
cv::WINDOW_AUTOSIZE
的大小调整...
cv::namedWindow( "PREVIEW", cv::WINDOW_AUTOSIZE );
-DWITH_OPENGL=ON
,不是我的Debian存储库版本),使用...
cv::namedWindow( "PREVIEW", cv::WINDOW_OPENGL );
cv::WINDOW_KEEPRATIO
一起工作只是
does not seem。*
cv:UMat
可以用作
cv:Mat
的直接替代品,从而进一步提高了性能(如
ps -e -o pcpu,args
所示):
float screen_aspratio = (float) screen_width / screen_height;
float image_aspratio = (float) image_width / image_height;
if ( image_aspratio >= screen_aspratio ) { // width limited, center window vertically
cv::resizeWindow("PREVIEW", screen_width, screen_width / image_aspratio );
cv::moveWindow( "PREVIEW", 0, (screen_height - image_height) / 2 );
}
else { // height limited, center window horizontally
cv::resizeWindow("PREVIEW", screen_height * image_aspratio, screen_height );
cv::moveWindow( "PREVIEW", (screen_width - image_width) / 2, 0 );
}
关于c++ - FHD视频流上OpenCV文本叠加的CPU占用空间太高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62243373/
我想制作一个基于 QT 的 GUI 程序,它将热图覆盖在来自 20fps 流式 FHD 视频的图像上。 目标图像看起来像这样 (此外,还应显示叠加图像旁边的颜色条。) 每个图像的热图源大小为 100x
是否有任何技巧可以使网站以与在 FHD 屏幕上相同的方式呈现,从而模拟它具有 1080 像素? 我尝试使用视口(viewport)元标记,但没有成功。 最佳答案 只要检测屏幕是否为 4k,例如>=
adb 可以看到设备,而 Flash/Flash Builder (CC) 没有 - 我错过了什么? (Android SDK 自带的 Eclipse IDE 也可以通过 USB 进行调试。) 最佳答
我有一个需要分析的输入文件(它是一个包含 4 帧的轨迹文件),其中涉及每个帧的 for 循环并创建一个临时文件,然后进行计算。计算结果连同输入文件中的一些信息将被写入输出文件。这是我的代码。 “sol
我需要在真实设备上调试一些 Android 应用程序。我有一个 ASUS Memo Pad 10 和一个装有 Windows 7 的台式机。 我尝试按照 Android Developer 网站上的说
我是一名优秀的程序员,十分优秀!