zoukankan      html  css  js  c++  java
  • 【转载】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();
    }
  • 相关阅读:
    编译原理词/语法分析
    【转】 c# 中为何load事件中不能画图
    [原创]GAMITGLOBK数据处理报告
    Google Earth上的点标记
    序贯平差
    【原创】C#写的水准网平差程序
    楼梯问题:一次最多跨两个阶梯,有多少种走法
    springMVC + Dubbo + zooKeeper超详细 步骤
    Git(to be continued...)
    autoconf & automake
  • 原文地址:https://www.cnblogs.com/hhxxgdd/p/8523967.html
Copyright © 2011-2022 走看看