【转载】OpenCV 摄像头控制

时间:2021-09-24 14:32:37

参考:[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 = );
~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.5秒刷新一次
m_timer->start();
} 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();
}