Я пытаюсь использовать OpenCV, C ++ в моей системе Windows 10 для записи экрана как части более крупной программы, которую я пишу. Мне нужна возможность записи на дисплей и сохранения записи для последующего просмотра.
Мне удалось найти эту ссылку в stackoverflow
Как захватить рабочий стол в OpenCV (т.е. превратить растровое изображение в мат)?
Пользователь john ktejik создал функцию, которая, по сути, выполнила именно то, что я хочу достичь, за исключением сохранения потока в файл.
Теперь, что я всегда делал в прошлом, когда я открывал соединение с моей веб-камерой или видеофайлом, я мог просто создать объект VideoWriter и записать отдельные кадры в файл. Я попытался сделать это, используя функцию Джона, чтобы выступить в роли источника видео.
int main (int argc, char **argv)
{
HWND hwndDesktop = GetDesktopWindow ();
int key = 0;
int frame_width = 1920;
int frame_height = 1080;
VideoWriter video ("screenCap.avi", CV_FOURCC ('M', 'J', 'P', 'G'), 15, Size (frame_width, frame_height));
while (key != 27)
{
Mat src = hwnd2mat (hwndDesktop);
video.write (src);
imshow ("Screen Capture", src);
key = waitKey (27);
}
video.release ();
destroyAllWindows ();
return 0;
}
В качестве вывода я вижу файл с именем "screenCap.avi", однако в нем нет видео. Файл сохраняется как 16 КБ памяти.
Функция Джона включена, так как она хорошо отображает кадры с помощью imshow (), но, похоже, не позволяет мне их сохранять.