OpenCV 实时捕获桌面屏幕

4
我在一个c++编程项目中使用OpenCV。我在OpenCV的某些限制方面遇到了一些困难,我想分析一个视频文件并检测特定对象。这完美地实现了,但我现在想要分析我的桌面屏幕的一个部分。(实时)有人知道如何完成这个任务吗?我想过制作一个网络摄像头模拟器来捕捉我的桌面屏幕,但我认为那太复杂了,应该有更简单的方法。

https://dev59.com/lmYq5IYBdhLWcg3w2EFi - Engine
谢谢你的回答!我更想要像这个视频一样的东西http://www.youtube.com/watch?v=z7rS6bH_OHY - RTNTVG
"engine" 给你的链接就是你需要的(Windows 操作系统)。稍后你可以将捕获限制在全屏的子区域,或者你也可以捕获单个窗口。 - Micka
libvlc也许是一个不错的选择:https://dev59.com/A3HYa4cB1Zd3GeqPKFXI - seleciii44
1个回答

4
如果您的目标是Windows操作系统,Engine推荐的选项似乎是理想的选择。
对于Linux系统,我最终使用了RTSP服务器(FFSERVER)作为VideoCapture输入,然后使用" x11grab "进行屏幕录制并使用FFMPEG进行转换。
Windows下的FFMPEG将接受"screen-capture-recorder"应用程序作为输入,但我没有在Windows上设置RTSP服务器的经验。
对于我的设置,这些代码看起来像这样:
cv::VideoCapture cap;
cap.open("http://localhost:8090/live.flv"); // open the default camera
cap.set(CV_CAP_PROP_FOURCC, CV_FOURCC('F', 'L', 'V', '1'));

并且

cv::resize(frame, frame, cv::Size(200, 200));
cv::VideoWriter outStream("http://localhost:8090/feed2.ffm",
CV_FOURCC('F', 'L', 'V', '1'), 10, cv::Size(200, 200), true);

为了最小化延迟,200x200的分辨率是必要的,因此如果您可以直接获取屏幕缓冲区以避免不必要的屏幕广播/编码,那么从性能角度来看听起来更好...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接