VS2017+Qt5+Opencv3.4调用摄像头拍照并存储
本篇攻略旨在介绍如何通过VS2017+Qt5+Opencv3.4实现调用摄像头拍照并将图片保存到本地。
硬件准备
首先需要一台PC并接入摄像头。
软件准备
- Visual Studio 2017
- Qt5
- OpenCV 3.4
工程创建
-
打开Visual Studio 2017,选择Create a new project,以Visual C++->Qt->Qt Widget Application的方式创建工程。
-
添加OpenCV库,首先在工程的属性中选择VC++ directories,在其中的Include Directories中加入OpenCV库的include路径,在Library Directories中加入OpenCV库的lib路径。
-
在Linker->Input->Additional Dependencies中添加OpenCV库的相关库文件。
-
在源文件中引入OpenCV库:
c++
#include "opencv2/opencv.hpp"
代码实现
- 创建摄像头捕获对象:
c++
cv::VideoCapture capture;
capture.open(0); //打开摄像头
if(!capture.isOpened()){
QMessageBox::critical(this,tr("Error"),tr("open camera failed!"));
return;
}
- 捕获摄像头当前帧:
c++
cv::Mat frame;
capture >> frame;
- 在Qt中显示当前帧:
c++
QImage img(frame.data, frame.cols, frame.rows, QImage::Format_RGB888);
ui->label->setPixmap(QPixmap::fromImage(img));
- 对当前帧进行处理,实现拍照功能:
```c++
cv::Mat frame_gray;
cv::cvtColor(frame,frame_gray,cv::COLOR_BGR2GRAY); //将帧转换为灰度图
// ...
capture.release(); //释放捕获对象
```
- 保存拍照后的图片到本地:
c++
cv::imwrite(filename,frame); //filename为图片保存的路径和名字
示例说明
下面是两条代码示例:
示例1:点击按钮实现拍照
void MainWindow::on_pushButton_clicked()
{
cv::Mat frame;
capture >> frame;
QImage img(frame.data, frame.cols, frame.rows, QImage::Format_RGB888);
ui->label->setPixmap(QPixmap::fromImage(img));
captured_frame = frame.clone(); //将当前帧保存到变量中
}
示例2:通过定时器实现实时预览
void MainWindow::on_startButton_clicked()
{
timer_camera->start(30); //定时器频率为30ms
}
void MainWindow::on_timer_camera_timeout()
{
cv::Mat frame;
capture >> frame;
QImage img(frame.data, frame.cols, frame.rows, QImage::Format_RGB888);
ui->label->setPixmap(QPixmap::fromImage(img));
}
总结
以上便是实现VS2017+Qt5+Opencv3.4调用摄像头拍照并存储的完整攻略。在代码实现过程中,需要注意Qt和OpenCV的数据类型转换问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:VS2017+Qt5+Opencv3.4调用摄像头拍照并存储 - Python技术站