http://www.cnblogs.com/yuliyang/p/3525107.html

项目pro文件:

#-------------------------------------------------
#
# Project created by QtCreator 2014-01-18T14:39:58
#
#------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = opencv_vedio
TEMPLATE = app
INCLUDEPATH +=D:\program\opencv\build\include\
INCLUDEPATH +D:\program\opencv\build\include\opencv\
INCLUDEPATH +=D:\program\opencv\build\include\opencv2\ CONFIG(debug,debug|release) {
LIBS += -LD:\program\opencv\build\x86\vc10\lib \
-lopencv_core244d \
-lopencv_highgui244d \
-lopencv_imgproc244d \
-lopencv_features2d244d \
-lopencv_calib3d244d
} else {
LIBS += -LD:\program\opencv\build\x86\vc10\lib \
-lopencv_core244 \
-lopencv_highgui244 \
-lopencv_imgproc244 \
-lopencv_features2d244 \
-lopencv_calib3d244
} SOURCES += main.cpp\
dialog.cpp HEADERS += dialog.h FORMS += dialog.ui

dialog.h:

#ifndef DIALOG_H
#define DIALOG_H #include <QDialog>
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <QTimer>
#include <QPixmap>
namespace Ui {
class Dialog;
} class Dialog : public QDialog
{
Q_OBJECT public:
explicit Dialog(QWidget *parent = 0);
~Dialog(); private:
Ui::Dialog *ui;
CvCapture *capture; //highgui 里提供的一个专门处理摄像头图像的结构体
IplImage *frame; //摄像头每次抓取的图像为一帧,使用该指针指向一帧图像的内存空间
QTimer *timer; //定时器用于定时取帧,上面说的隔一段时间就去取就是用这个实现。
private slots:
void getFrame(); //实现定时从摄像头取图并显示在label上的功能。 }; #endif // DIALOG_H

dialog.cpp:

#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
timer = new QTimer(this);
capture = cvCaptureFromCAM(0); //cvCaptureFromCAM其实是一个宏,就是cvCreateCameraCapture的别名,0代表第一个摄像头。-1代表默认摄像头。
if(capture==NULL){
qDebug()<<"error!";
}
timer->start(50); //1000为1秒,50毫秒去取一帧
connect(timer,SIGNAL(timeout()),this,SLOT(getFrame())); //超时就去取
} Dialog::~Dialog()
{
timer->stop(); //停止取帧
cvReleaseCapture(&capture); //释放资源是个好习惯
delete ui;
}
void Dialog::getFrame(){
frame = cvQueryFrame(capture); //从摄像头取帧
QImage image = QImage((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888).rgbSwapped(); //简单地转换一下为Image对象,rgbSwapped是为了显示效果色彩好一些。
ui->label->setPixmap(QPixmap::fromImage(image));
}

效果:

最新文章

  1. 我的“第一次”,就这样没了:DDD(领域驱动设计)理论结合实践
  2. vs2013在使用ReportView11时遇到的问题
  3. CSS white-space 属性
  4. hdu, KMP algorithm, linear string search algorithm, a nice reference provided 分类: hdoj 2015-07-18 13:40 144人阅读 评论(0) 收藏
  5. 学习ASP.NET MVC(九)——“Code First Migrations ”工具使用示例
  6. python中random模块使用
  7. POJ 2155 Matrix (二维线段树入门,成段更新,单点查询 / 二维树状数组,区间更新,单点查询)
  8. sql - 查询所有表中包含指定值
  9. LinqToSql 小例子
  10. 最小值滤波 (C 语言实现)
  11. Java于 初始化序列?
  12. python之路 - 基础3
  13. 微信小程序demo-环球小镇
  14. JVM核心之JVM运行和类加载全过程
  15. linux zabbix监控服务器搭建
  16. node day1 login
  17. java中的exception stack有时候不输出的原因(转)
  18. Linux串口—struct termios结构体【转】
  19. topcoder srm 475 div1
  20. VA&amp;RVA 和 RVA to RAW

热门文章

  1. Prince2是怎么考试的?
  2. GnuPG 的PGP使用
  3. 使用vs2013打开vs2015项目
  4. SpringMVC控制器与视图的数据交换
  5. indexOf属性不支持
  6. Android Studio - HPROF文件查看和分析工具
  7. C#_批量插入数据到Sqlserver中的四种方式
  8. IntelliJ IDEA 修改包名
  9. linux笔记:文件系统管理-fdisk分区
  10. 20150514Linux下rpm包安装错误及解决方案