参考:[OpenCV] -- 简单摄像头操作 - 代码人生 - 博客频道 - CSDN.NET
http://blog.csdn.net/qiurisuixiang/article/details/8670882
1、打开Qt Creator,新建一个Qt Gui工程
2、打开ui文件,设计成下图(注意:图像显示是一个QLabel,用于显示摄像头拍到的照片,将其拖大点,不然太小拍到的照片显示部分过小)
3、大致思路是:点击打开摄像头按钮,则开启摄像头,并设置一个定时器,每隔一段时间捕获摄像头摄取到的帧,将其转换成QImage,最最后在QLabel控件上显示
PS:实现过程中用到两个重要的函cvCreateCameraCapture(开启摄像头)和cvReleaseCapture(关闭摄像头)
【代码】
// opencamera.h #ifndef OPENCAMERA_H #define OPENCAMERA_H #include <QDialog> #include <QTimer> #include <QImage> #include "cv.h" #include "highgui.h" namespace Ui { class OpenCamera; } class OpenCamera : public QDialog { Q_OBJECT public: explicit OpenCamera(QWidget *parent = 0); ~OpenCamera(); private slots: void sltBtnOpenCamera(); //打开摄像头 void sltBtnCloseCamera(); //关闭摄像头 void sltTimeOut(); //定时器时间到达 读取摄像头详细 private: Ui::OpenCamera *ui; //定时器对象 没隔一段时间读取摄像头详细 QTimer *m_timer; CvCapture *m_camera; //视频获取结构 作为视频获取函数的返回值 IplImage *m_imgFrame; //IplImage结构指针 存放每一帧的图像 }; #endif // OPENCAMERA_H
// opencamera.cpp #include "opencamera.h" #include "ui_opencamera.h" OpenCamera::OpenCamera(QWidget *parent) : QDialog(parent), ui(new Ui::OpenCamera) { ui->setupUi(this); //初始化成员变量 m_timer = new QTimer(this); m_camera = NULL; m_imgFrame = NULL; //连接信号和槽 connect(ui->m_btnOpenCamera, SIGNAL(clicked()), this, SLOT(sltBtnOpenCamera())); connect(ui->m_btnCloseCamera, SIGNAL(clicked()), this, SLOT(sltBtnCloseCamera())); connect(m_timer, SIGNAL(timeout()), this, SLOT(sltTimeOut())); } OpenCamera::~OpenCamera() { delete ui; } void OpenCamera::sltBtnOpenCamera() { //打开摄像头 从摄像头中获取视频 m_camera = cvCreateCameraCapture(0); //开启定时器 没隔0.5秒刷新一次 m_timer->start(500); } void OpenCamera::sltTimeOut() { //读取摄像头信息 将读取回来的帧转换成QImage类型 并在主界面的QLabel中显示 //从摄像头中抓取并返回每一帧 m_imgFrame = cvQueryFrame(m_camera); //将抓取到的帧转换成QImage格式 QImage showImage((const uchar*)m_imgFrame->imageData, m_imgFrame->width, m_imgFrame->height, QImage::Format_RGB888); //将图片显示到QLabel上 ui->m_lbPhoto->setPixmap(QPixmap::fromImage(showImage)); } void OpenCamera::sltBtnCloseCamera() { //释放摄像头内存 cvReleaseCapture(&m_camera); //停止定时器 m_timer->stop(); } //main.cpp #include "opencamera.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); OpenCamera w; w.show(); return a.exec(); }