我正在使用OpenCV进行c ++编码项目。我对OpenCV中的一些限制有些困难,我想分析一个视频文件并检测某些对象。这很好用,但现在我希望它分析我的桌面屏幕的一部分。 (活)
有没有人知道如何做到这一点?我想制作一个捕捉我的桌面屏幕的网络摄像头模拟器,但我认为这样会变得复杂,而且应该更容易。
答案 0 :(得分:4)
如果你的目标是Windows操作系统,那么Engine推荐的选项似乎很理想。
对于Linux,我最终使用RTSP服务器(FFSERVER)作为VideoCapture输入,然后使用FFMPEG使用" x11grab"进行屏幕录像。
FFMPEG for Windows将接受"屏幕捕获记录器"应用程序作为输入,但我没有任何经验在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分辨率对于最小化延迟是必要的,因此如果您可以直接抓取屏幕缓冲区以避免从性能角度看起来更好的不必要的屏幕录像/编码......