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

来源:互联网 发布:原田知世 老公是 编辑:程序博客网 时间:2024/04/28 02:54

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


运行截图:

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一直流鼻涕怎么回事该怎么办 感冒一直流鼻涕该怎么办 婴儿一个月鼻塞怎么办 1岁婴儿感冒怎么办 轻微鼻塞感冒了怎么办 50天宝宝鼻塞怎么办 50天婴儿鼻塞怎么办 50天新生儿鼻塞怎么办 40天婴儿鼻塞怎么办 孩子感冒鼻子塞怎么办 月子里感冒了怎么办 宝宝感冒鼻塞严重怎么办 婴幼儿鼻塞有痰怎么办 感冒了浑身没劲怎么办 四个月宝宝鼻塞怎么办 四个月小孩鼻塞怎么办 小儿流清水鼻涕怎么办 小孩总是流鼻子怎么办 四个月小孩咳嗽怎么办 儿童流清水鼻涕怎么办 四个月婴儿发烧怎么办 宝宝体温36度怎么办 儿童感冒后鼻塞怎么办 儿童没感冒鼻塞怎么办 宝宝鼻塞怎么办3岁 儿童刚开始感冒鼻塞怎么办 婴儿感冒打喷嚏流鼻涕怎么办 宝宝感冒鼻涕多怎么办 一个多月的宝宝鼻塞怎么办 五个月宝宝鼻塞怎么办 4个月大婴儿鼻塞怎么办 四个月婴儿鼻塞怎么办 鼻炎晚上睡觉鼻塞怎么办 感冒了一直流鼻涕怎么办 感冒了鼻塞严重怎么办 两边鼻子都塞怎么办 感冒睡觉鼻子堵怎么办 孩子鼻炎流清水怎么办 小儿鼻涕流不停怎么办 老是单侧流鼻涕怎么办 有鼻炎光流鼻涕怎么办