【转载】OpenCV 摄像头控制

参考:[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();
}

 

posted @ 2018-03-07 17:58  CodingNote  阅读(2190)  评论(0编辑  收藏  举报