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();
    }
  • 相关阅读:
    Git忽略规则.gitignore梳理
    基于Spring + Spring MVC + Mybatis 高性能web构建
    Java语言主要特点有哪些?
    PHP,JAVA,NET 开发比较
    Linux系统SVN安装指导配置说明
    SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
    Java Service Wrapper简介与使用
    js 使用tsx文件 引入node_modules安装的包文件提示 未找到模块(默认已经安装此包文件)
    js 压缩图片
    配置 ts-loader 后 执行编译时报错 TS6142: Module './router' was resolved to 'C:GitHubWorkspacewebpackPluginDemosrc outer.tsx', but '--jsx' is not set.
  • 原文地址:https://www.cnblogs.com/hhxxgdd/p/8523967.html
Copyright © 2011-2022 走看看