赞
踩
一、简述
记--简单的将USB摄像头捕获的图像数据显示到窗口上。
例子1打包:链接: https://pan.baidu.com/s/1U3CW7sCETVyeMqTRD6dNUQ 提取码: gh5x
例子2打包:链接: https://pan.baidu.com/s/11tFqk_p0NSjIO94-2kv0vA 提取码: v7h5
例子1 直接显示到窗口
二、效果
将USB摄像头连接到电脑(有些摄像头需要安装驱动),然后打开软件就可以看到摄像头捕获的图像了。
(例子中默认打开第一个摄像头设备)
使用摄像头类型为:
三、工程结构
布局
四、源文件
MyCamera.pro文件
- QT += core gui multimediawidgets
-
- greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-
- TARGET = MyCamera
- TEMPLATE = app
-
-
- SOURCES += main.cpp\
- mainwindow.cpp
-
- HEADERS += mainwindow.h
-
- FORMS += mainwindow.ui
mainwindow.cpp文件
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
-
- #include <QMainWindow>
- #include <QCamera>
-
- namespace Ui {
- class MainWindow;
- }
-
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
-
- public:
- explicit MainWindow(QWidget *parent = 0);
- ~MainWindow();
-
- private:
- Ui::MainWindow *ui;
- QCamera* m_camera;//摄像头设备
- };
-
- #endif // MAINWINDOW_H

main.cpp文件
- #include "mainwindow.h"
- #include <QApplication>
-
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- MainWindow w;
- w.show();
-
- return a.exec();
- }
mainwindow.cpp文件
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
-
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- m_camera = new QCamera(this);//初始化摄像头设备
- m_camera->setCaptureMode(QCamera::CaptureVideo);//设置捕捉模式为视频
- m_camera->setViewfinder(ui->centralWidget);//设置 摄像头画面的显示位置
- m_camera->start();//开启摄像头
- }
-
- MainWindow::~MainWindow()
- {
- delete ui;
- }

五、总结
1、使用摄像头相关类QCamera,需要在.pro文件添加:multimediawidgets
更多请查看帮助文档:
2、 摄像头显示的窗体控件需要提升为QVideoWidget类型
例子2 显示到widget控件
一、效果
二、工程结构
布局
三、主要代码
mainwindow.cpp文件
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
-
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- m_camera = new QCamera(this);//初始化摄像头设备
- m_camera->setCaptureMode(QCamera::CaptureVideo);//设置捕捉模式为视频
- m_camera->setViewfinder(ui->widgetCamera);//设置 摄像头画面的显示位置
-
- }
-
- MainWindow::~MainWindow()
- {
- delete ui;
- }
-
- void MainWindow::on_btnCameraCtrl_clicked()//摄像头开关控制
- {
- if( (ui->btnCameraCtrl->text() == "开启摄像头") && (m_camera->state() != QCamera::ActiveState) )//未开启状态
- {
- m_camera->start();//开启摄像头
- ui->btnCameraCtrl->setText("关闭摄像头");
- }
- else
- {
- m_camera->stop();//关闭摄像头
- ui->btnCameraCtrl->setText("开启摄像头");
- }
- }
-
-
- void MainWindow::on_btnSnap_clicked()//抓拍
- {
- if( m_camera->state() == QCamera::ActiveState)//摄像头开启状态下才抓拍
- {
- QPixmap pixmap = ui->widgetCamera->grab();//将widget内容保存为pixmap图像信息
- pixmap.save("Snap.bmp");//保存为Snap.bmp
- }
- }

四、总结
4.1 将widget显示内容保存为图片
- QPixmap pixmap = ui->widgetCamera->grab();//将widget内容保存为pixmap图像信息
- pixmap.save("Snap.bmp");//保存为Snap.bmp
4.2 获取可用摄像头设备列表
- //包含头文件QCameraInfo
- QList<QCameraInfo> cameras = QCameraInfo::availableCameras();//获取可用摄像头设备列表
- foreach (const QCameraInfo &cameraInfo, cameras)
- {
- qDebug()<<cameraInfo.deviceName();//摄像头的设备名称
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。