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();
}
运行截图: