【软件开发】
本系统开发采用了QT编程技术,OPENCV技术,多线程技术实现的视频监控和录制系统。主要包括视频数据的采集,视频录制和截图保存等功能。
(1)环境搭建
下载并安装QT5.9.8:
下载安装opencv3.4.3:
(2)新建工程
(3)在工程中配置opencv链接库
(4)界面布局
(5)结果展示
左边是视频显示区域,右边是截图后显示的照片;
【OPENCV相关知识】
【01读写类文件的使用】
在编写函数之前,对用到OpenCV中的类稍作介绍: 像对其他硬件操作一样,要想调用系统中的摄像头,无非就两个操作一个读,一个写,那么OpenCV这个开源库就为我们对摄像头的读写操作编写了两个类。
VideoCapture 用于视频的读操作(这里的读包括两个方面,一个是对摄像头画面的读取,另一个是对视频文件帧的读取)
VideoWriter 用于视频的写操作(主要用于将获取的画面以帧的形式写入视频文件中,实现视频的保存)
另外,在从获取视频的帧,到画面的显示,这个过程中画面 都是以矩阵的形式进行传递与转换,这就用到了另外一个类 Mat。
可以说,从一开始加载图片,到我们最终实现多线程调用摄像头、保存、回放视频,都是这三个类中相关函数的作用。
【02视频编码格式】
【03需要使用的动态链接库】
录像保存:需要用到opencv_ffmpeg.dll
保存视频的效果图:
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: 程序异常结束。
问题分析:可能是cap_msmf.cpp导致程序出错;
解决方法:cap.opencv (0,::CAP_DSHOW);
【问题描述2】
Camera视频录制的时候有文件生成,但内存为0KB
解决方法:参考链接:
【问题描述】Camera 视频录制有文件生成,但只有6kb ,而且程序无法打开。
问题分析:经过调试发现,6kB 是因为视频流没有真正写入进来,经过查阅资料,发现没有写读取视频流的代码:在录制视频程序中加入这行代码问题解决。
初始化时使用的帧大小和写入文件帧大小应该相同。
【问题描述3】
可以录制一定时长的程序,但是程序运行一段时间后报错:
后将模式由Debug模式改为Release模式,
【问题描述4】
视频录制完成后,进行播放是快进式播放,经过查阅资料可能是release模式
截图功能实现的过程