项目简介
本项目是通过Qt及OpenCV库,实现功能包括调取摄像头、录制并保存视频及播放录像的监控系统。再在监控系统中加入百度地图,实现地图操控开关摄像头。
项目内容
摄像头的开启关闭:
该功能主要使用到三个对象,分别为Mat ; VideoCapture; VideoWriter。Mat类,即OpenCV用于存储图像的矩阵类,其每一个元素都代表一个像素,会储存图像的基本信息。将该信息显示在Qlabel上,VideoCapture类用于提供打开视频捕捉设备、视频文件及网络视频的接口。VideoWriter提供录制视频的接口。

Open(0)中0代表本机的摄像头,打开它,同时打开定时器,定时器通过每隔一段时间发送信号去调用ReadFrame,一帧一帧的把图像信息显示在Qlabel上,连续起来实现动态图像。

ReadFrame函数中有ui->label->setPixmap(QPixmap::fromImage(MatToImage(frame)));
setPixmap()为QLabel下显示图片的函数,QPixmap::fromImage则将QImage类型转换为在屏幕上显示的QPixmap类型。

MatToImage通过channels判断Mat的通道数,将Mat转换为Qt可识别的QImage类型。
再显示在Qlabel上。
视频画面双击放大:
由于Qlabel控件的信号与槽是没有双击的。当我们想使用双击时应该怎么做?
这里就要讲到控件的提升。在提升状态下,可以给控件自定义信号与槽。
首先我们要新建一个类,且要继承于Qlabel。

自定义信号为doubleClied(),槽函数也可以自定义,但我这里重写了双击事件。

然后再在事件中发送信号。这样类就写好了。
最好在打开ui->拖入一个普通的QLabel->点击右键提升为,如下图:

在类名称这里填入刚刚新建类的名称,在上方勾选新建的类,调用该类。提升过后才会出现改变改变信号/槽的选项。在ui设计界面右击label控件->改变信号/槽->在信号栏添加刚刚的自定义信号。

这时在ui设计界面右击label->转到槽->就可以看到我们自定义doubleClicked()信号。

像这种自定义槽的方法和系统转到槽一样,已经连接过了,不用再使用connect进行信号与槽的连接,可以直接使用。这就完成了自定义信号与槽。这时我们在软件上双击label就可以实现槽函数中的功能。