qt做的一个动态实时监控项目

做了一个摄像头监控的项目

环境:qtcreator-2.5.2+Qt4.7.3+MinGW+openCV2.1(装在c盘根目录下,在项目中引入的时候有用)

功能介绍:监控笔记本摄像头,通过opencv的函数打开摄像头,用帧差分算法判断监控的区域有没有发生变化,也就是有没有物体进入监控区域,当监控的区域发生变化时,将这一帧发送给服务器端

之前环境不允许,一直用一台电脑既当服务器又当客户端,挺成功的,结果两台机子运行的时候就出错了,坑爹,后来身边没有别的机子有做这个项目的环境,所以一直没有找到为什么两台机子运行时出错的原因,今天改了改代码,不知道现在能不能成功,代码写的不规范,见谅可怜,运行的时候内存飕飕往上升,一看就是空间没有回收,希望大家能够指出不对的地方,谢谢奋斗

目录结构:

在qtCalv2.pro中添加

QT       += core gui
QT       += network
INCLUDEPATH += C:\OpenCV2.1\include\opencv
LIBS += C:\OpenCV2.1\lib\highgui210.lib \
           C:\OpenCV2.1\lib\cxcore210.lib \
           C:\OpenCV2.1\lib\cv210.lib
添加opencv库,因为涉及到网络所以加上 QT += network
main.cpp中添加

#include<QTextCodec>

main函数中添加

QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

widget.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <cv.h>
#include <highgui.h>
#include <QImage>
#include <QTimer>
#include <QtGui>
#include <QEvent>
#include <QAbstractSocket>
#include <QTcpSocket>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT
    
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

protected:
    void closeEvent(QCloseEvent * e);

private slots:
    void openCamara();      // 打开摄像头
    void readFrame();       // 读取当前帧信息
    void closeCamara();     // 关闭摄像头

    /*
        author:xuxuan
        description:初始化tcp数据
        date:2014-2-18 15:27
    */
    void send();
    void startTransfer();
    void updateClientProgress(qint64);
    void displayError(QAbstractSocket::SocketError);

    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
    QTimer    *timer;
    QImage    *imag;
    CvCapture *cam;// 视频获取结构, 用来作为视频获取函数的一个参数
    IplImage  *frame;//申请IplImage类型指针,就是申请内存空间来存放每一帧图像

    IplImage  *frImg;   //保存当前张图片
    IplImage  *bkImg;   //保存前一张图片
    CvMat *frameMat;    //当前帧mat
    CvMat *frMat;       //当前帧减去前一帧
    CvMat *bkMat;       //前一帧mat

    int whiteNum;       //frMat中白点的个数
    int frameNum;       //第几帧
    /*
        author:xuxuan
        description:初始化tcp数据
        date:2014-2-18 15:27
    */
    QTcpSocket *tcpClient;
    qint64 totalBytes;  // 发送数据的总大小
    qint64 bytesWritten;  // 已经发送数据大小
    qint64 bytesToWrite;   // 剩余数据大小
    qint64 payloadSize;   // 每次发送数据的大小
    QByteArray outBlock;  // 数据缓冲区,即存放每次要发送的数据块

    QBuffer buffer;
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值