【软件开发】

      本系统开发采用了QT编程技术,OPENCV技术,多线程技术实现的视频监控和录制系统。主要包括视频数据的采集,视频录制和截图保存等功能。

(1)环境搭建

下载并安装QT5.9.8:

下载安装opencv3.4.3:

(2)新建工程

(3)在工程中配置opencv链接库

opencv屏幕录制 opencv录屏功能实现_OpenCV

(4)界面布局

opencv屏幕录制 opencv录屏功能实现_ide_02

(5)结果展示

左边是视频显示区域,右边是截图后显示的照片;

【OPENCV相关知识】

【01读写类文件的使用】

在编写函数之前,对用到OpenCV中的类稍作介绍: 像对其他硬件操作一样,要想调用系统中的摄像头,无非就两个操作一个读,一个写,那么OpenCV这个开源库就为我们对摄像头的读写操作编写了两个类。

VideoCapture 用于视频的读操作(这里的读包括两个方面,一个是对摄像头画面的读取,另一个是对视频文件帧的读取)

VideoWriter 用于视频的写操作(主要用于将获取的画面以帧的形式写入视频文件中,实现视频的保存)

另外,在从获取视频的帧,到画面的显示,这个过程中画面 都是以矩阵的形式进行传递与转换,这就用到了另外一个类 Mat

可以说,从一开始加载图片,到我们最终实现多线程调用摄像头、保存、回放视频,都是这三个类中相关函数的作用。

【02视频编码格式】

opencv屏幕录制 opencv录屏功能实现_OpenCV_03

【03需要使用的动态链接库】

opencv屏幕录制 opencv录屏功能实现_视频录制_04

录像保存:需要用到opencv_ffmpeg.dll

保存视频的效果图:

opencv屏幕录制 opencv录屏功能实现_视频录制_05

2 在项目文件中完成OPENCV的配置,加载

下载opencv3.4.3,然后完成opencv的配置

下载地址:

CONFIG

SOURCES

        main.cpp \

        mainwindow.cpp \

    thread_record.cpp

HEADERS

        mainwindow.h \

    thread_record.h

FORMS

        mainwindow.ui

INCLUDEPATH += D:/opencv3.4.3/include

include/opencv \

include/opencv2

#               D:/opencv3.4.3/include/opencv2/video/video.hpp\

#               D:/opencv3.4.3/include/opencv2/core/mat.hpp

LIBS

常见问题及解决方法:

【问题描述1】:

在Release模式下,运行Camera程序,点击打开摄像头,无问题,打开开始录制,程序执行一段时间后退出;报错如下:

OpenCV: terminate handler is called! The last OpenCV error is:

OpenCV(3.4.3) Error: Assertion failed (videoSample) in SourceReaderCB::Wait, file c:\build\3_4_winpack-build-win64-vc15\opencv\modules\videoio\src\cap_msmf.cpp, line 1079

09:57:55: 程序异常结束。

opencv屏幕录制 opencv录屏功能实现_视频录制_06

问题分析:可能是cap_msmf.cpp导致程序出错;

解决方法:cap.opencv (0,::CAP_DSHOW);

opencv屏幕录制 opencv录屏功能实现_视频录制_07

【问题描述2】

Camera视频录制的时候有文件生成,但内存为0KB

解决方法:参考链接:

 

opencv屏幕录制 opencv录屏功能实现_ide_08

【问题描述】Camera 视频录制有文件生成,但只有6kb ,而且程序无法打开。

问题分析:经过调试发现,6kB 是因为视频流没有真正写入进来,经过查阅资料,发现没有写读取视频流的代码:在录制视频程序中加入这行代码问题解决。

opencv屏幕录制 opencv录屏功能实现_ide_09

初始化时使用的帧大小和写入文件帧大小应该相同。

【问题描述3】

可以录制一定时长的程序,但是程序运行一段时间后报错:

opencv屏幕录制 opencv录屏功能实现_视频录制_10

后将模式由Debug模式改为Release模式,

【问题描述4】

 视频录制完成后,进行播放是快进式播放,经过查阅资料可能是release模式

截图功能实现的过程