2014-11-12 13 views
4

Я использую OpenCV для проекта кодирования C++. У меня есть некоторые трудности с некоторыми ограничениями в OpenCV, я хочу проанализировать видеофайл и обнаружить определенные объекты. Это работает отлично, но теперь я хочу, чтобы он проанализировал раздел моего рабочего стола. (в прямом эфире)OpenCV захват рабочего стола live

Кто-нибудь знает, как это осуществить? Я думал о создании симулятора веб-камеры, который захватывает мой рабочий стол, но я думаю, что это сложно, и это должно быть намного проще.

+0

http://stackoverflow.com/questions/14148758/how-to-capture-the-desktop-in-opencv-ie-turn-a-bitmap -в to-a-mat – Engine

+0

Спасибо за ваш ответ! Я больше ищу что-то вроде этого http://www.youtube.com/watch?v=z7rS6bH_OHY – RTNTVG

+0

Ссылка «движок» дала вам то, что вам нужно (ОС Windows). Вы можете ограничить захват в подрайоне полного экрана позже или вы можете захватить одно окно, если хотите. – Micka

ответ

4

Если вы ориентируетесь на ОС Windows, опция, рекомендованная Engine, кажется идеальной.

Для Linux я закончил использование RTSP-сервера (FFSERVER) в качестве входа VideoCapture, а затем screencasting с использованием FFMPEG с помощью «x11grab».

FFMPEG для 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 необходимо минимизировать задержку, так что если вы можете захватить буфер экрана напрямую, чтобы избежать ненужное скринкастирование/кодирование, которое звучит лучше с точки зрения производительности ...

Смежные вопросы