QT5实现摄像头预览与扑捉图像

摘要:Qt5.0版本新增了QMultimedia模块提供了更为方便的编程支持,该模块主要涵盖视频、音频、收音机以及摄像头等功能支持,提供了非常多的QML类型和C++类用以处理多媒体内容,Qt 5将Qt Multimedia模块放在了核心模块中,因此它支持所有主要平台,这些类需要在 pro 文件中添加 QT += multimedia. 


Step1:用Qt creator新建Qt Widgets Application工程  
按照提示下一步即可创建模板工程,如图,并修改.pro文件添加 QT +=multimedia,QT+=multimediawidgets项


Step2:双击mainwindow.ui启动qt designer可视化布局界面 
首先在布局左侧放置一个Horizental Layout控件,修改对象名为ImageView,用于图像预览显示;再在右侧放一个Vertical Layout 控件,依次在其中放置一个label和三个Push Button,修改label的对象名为ImageCapture,用于显示捕获的图像,修改按钮的显示名称及对象名分别为buttonCapture, buttonSave, buttonQuit,拖动控件到合适的布局,如图 


Step3:修改mainwindow.h 
源码如下

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #ifndef MAINWINDOW_H  
  2. #define MAINWINDOW_H  
  3.   
  4. #include <QMainWindow>  
  5. #include <QCamera>  
  6. #include <QCameraViewfinder>  
  7. #include <QCameraImageCapture>  
  8. #include <QFileDialog>  
  9.   
  10.   
  11.   
  12. namespace Ui {  
  13. class MainWindow;  
  14. }  
  15.   
  16. class QCamera;  
  17. class QCameraViewfinder;  
  18. class QCameraImageCapture;  
  19.   
  20. class MainWindow : public QMainWindow  
  21. {  
  22. Q_OBJECT  
  23.   
  24. public:  
  25. explicit MainWindow(QWidget *parent = 0);  
  26. ~MainWindow();  
  27.   
  28. private slots:  
  29. void captureImage();  
  30. void displayImage(int,QImage);  
  31. void saveImage();  
  32.   
  33. private:  
  34. Ui::MainWindow *ui;  
  35.   
  36. QCamera *camera;  
  37. QCameraViewfinder *viewfinder;  
  38. QCameraImageCapture *imageCapture;  
  39. };  
  40.   
  41. #endif // MAINWINDOW_H  
Step4 : 修改mainwindow.cpp 
源码如下

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include "mainwindow.h"  
  2. #include "ui_mainwindow.h"  
  3.   
  4. MainWindow::MainWindow(QWidget *parent) :  
  5. QMainWindow(parent),  
  6. ui(new Ui::MainWindow)  
  7. {  
  8. ui->setupUi(this);  
  9.   
  10. camera=new QCamera(this);  
  11. viewfinder=new QCameraViewfinder(this);  
  12. imageCapture=new QCameraImageCapture(camera);  
  13.   
  14. ui->ImageView->addWidget(viewfinder);  
  15. ui->ImageCapture->setScaledContents(true);  
  16.   
  17. camera->setViewfinder(viewfinder);  
  18. camera->start();  
  19.   
  20. connect(imageCapture, SIGNAL(imageCaptured(int,QImage)), this, SLOT(displayImage(int,QImage)));  
  21.   
  22. connect(ui->buttonCapture, SIGNAL(clicked()), this, SLOT(captureImage()));  
  23. connect(ui->buttonSave, SIGNAL(clicked()), this, SLOT(saveImage()));  
  24. connect(ui->buttonQuit, SIGNAL(clicked()), qApp, SLOT(quit()));  
  25. }  
  26.   
  27. MainWindow::~MainWindow()  
  28. {  
  29. delete ui;  
  30. }  
  31.   
  32. void MainWindow::captureImage()  
  33. {  
  34. ui->statusBar->showMessage(tr("capturing..."), 1000);  
  35. imageCapture->capture();  
  36. }  
  37.   
  38. void MainWindow::displayImage(int , QImage image)  
  39. {  
  40. ui->ImageCapture->setPixmap(QPixmap::fromImage(image));  
  41.   
  42. ui->statusBar->showMessage(tr("capture OK!"), 5000);  
  43. }  
  44.   
  45. void MainWindow::saveImage()  
  46. {  
  47. QString fileName=QFileDialog::getSaveFileName(this, tr("save file"), QDir::homePath(), tr("jpegfile(*.jpg)"));  
  48. if(fileName.isEmpty()) {  
  49. ui->statusBar->showMessage(tr("save cancel"), 5000);  
  50. return;  
  51. }  
  52. const QPixmap* pixmap=ui->ImageCapture->pixmap();  
  53. if(pixmap) {  
  54. pixmap->save(fileName);  
  55. ui->statusBar->showMessage(tr("save OK"), 5000);  
  56. }  
  57. }  

Step5 :编译工程效果如下



转载:http://www.cnblogs.com/annt/p/ant_000.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值