转自:http://blog.youkuaiyun.com/qiurisuixiang/article/details/8670882
Email :
hahayacoder@gmail.com
1 简单玩了下OpenCV中开启和关闭电脑摄像头,其实挺简单的,接下来在Qt中实现
2 打开Qt Creator,新建一个Qt Gui工程
3 打开ui文件,设计成下图(注意:图像显示是一个QLabel,用于显示摄像头拍到的照片,将其拖大点,不然太小拍到的照片显示部分过小)
4 实现过程中用到两个重要的函cvCreateCameraCapture(开启摄像头)和cvReleaseCapture(关闭摄像头)
5大致思路是:点击打开摄像头按钮,则开启摄像头,并设置一个定时器,每隔一段时间捕获摄像头摄取到的帧,将其转换成QImage,最最后在QLabel控件上显示
6代码如下
- // 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();
- }
运行截图: