读书人

[OpenCV] - 容易摄像头操作

发布时间: 2013-03-16 11:51:46 作者: rapoo

[OpenCV] -- 简单摄像头操作

Email : hahayacoder@gmail.com

1 简单玩了下OpenCV中开启和关闭电脑摄像头,其实挺简单的,接下来在Qt中实现

2 打开Qt Creator,新建一个Qt Gui工程

3 打开ui文件,设计成下图(注意:图像显示是一个QLabel,用于显示摄像头拍到的照片,将其拖大点,不然太小拍到的照片显示部分过小)

[OpenCV] - 容易摄像头操作

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();}


运行截图:

[OpenCV] - 容易摄像头操作

读书人网 >其他相关

热点推荐