VS2017+Qt5+Opencv3.4调用摄像头拍照并存储

VS2017+Qt5+Opencv3.4调用摄像头拍照并存储

本篇攻略旨在介绍如何通过VS2017+Qt5+Opencv3.4实现调用摄像头拍照并将图片保存到本地。

硬件准备

首先需要一台PC并接入摄像头。

软件准备

  • Visual Studio 2017
  • Qt5
  • OpenCV 3.4

工程创建

  1. 打开Visual Studio 2017,选择Create a new project,以Visual C++->Qt->Qt Widget Application的方式创建工程。

  2. 添加OpenCV库,首先在工程的属性中选择VC++ directories,在其中的Include Directories中加入OpenCV库的include路径,在Library Directories中加入OpenCV库的lib路径。

  3. 在Linker->Input->Additional Dependencies中添加OpenCV库的相关库文件。

  4. 在源文件中引入OpenCV库:

c++
#include "opencv2/opencv.hpp"

代码实现

  1. 创建摄像头捕获对象:

c++
cv::VideoCapture capture;
capture.open(0); //打开摄像头
if(!capture.isOpened()){
QMessageBox::critical(this,tr("Error"),tr("open camera failed!"));
return;
}

  1. 捕获摄像头当前帧:

c++
cv::Mat frame;
capture >> frame;

  1. 在Qt中显示当前帧:

c++
QImage img(frame.data, frame.cols, frame.rows, QImage::Format_RGB888);
ui->label->setPixmap(QPixmap::fromImage(img));

  1. 对当前帧进行处理,实现拍照功能:

```c++
cv::Mat frame_gray;
cv::cvtColor(frame,frame_gray,cv::COLOR_BGR2GRAY); //将帧转换为灰度图

// ...

capture.release(); //释放捕获对象
```

  1. 保存拍照后的图片到本地:

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技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • plsql手动修改数据

    PL/SQL手动修改数据 在Oracle数据库中,PL/SQL是一种过程化编程语言,不仅能够进行数据定义和控制,还可以用于数据的插入、更新和删除。 当我们需要修改数据库中的数据时,可以使用PL/SQL语句实现。下面我们举例说明如何使用PL/SQL手动修改数据。 步骤一:进入SQL Developer 首先,运行SQL Developer,连接数据库并选择要修…

    其他 2023年3月28日
    00
  • [python简介]让我们在python中使用foreach

    下面是关于“[python简介]让我们在python中使用foreach”的完整攻略: 1. 什么是foreach 在Python中,foreach是一种循环结构,用于遍历列表、元组、字典等可迭代对象中的元素。foreach循环可以让我们更加方便地遍历列表、元组、字典等数据结构中的元素,从而更加高效地处理数据。 2. 如何使用foreach 在Python中…

    other 2023年5月7日
    00
  • iOS + node.js使用Socket.IO框架进行实时通信示例

    下面是“iOS + node.js使用Socket.IO框架进行实时通信示例”的完整攻略。 背景介绍 Socket.IO 是一种实现实时、双向、可靠、基于事件的通信方式的 JavaScript 库。在本教程中,我们将使用 Socket.IO 框架实现 iOS 应用程序与 node.js 服务器之间的实时通信。 步骤1:创建node.js服务器 首先,我们需要…

    other 2023年6月27日
    00
  • Java TCP协议通信超详细讲解

    Java TCP协议通信超详细讲解 什么是TCP协议 TCP(Transmission Control Protocol)传输控制协议是一种可靠的、面向连接的传输层协议。TCP协议通过序列号、确认、重传等方式,确保传输的可靠性,但会对网络带宽进行占用,因此适用于对网络传输质量要求高的场景。 TCP协议通信的基本流程 TCP协议通信的基本流程如下: 服务器启动…

    other 2023年6月27日
    00
  • CentOS实现将php和mysql命令加入到环境变量中的几种方法

    本文讲解“CentOS实现将php和mysql命令加入到环境变量中的几种方法”的完整攻略,主要包括以下几个步骤: 查看环境变量 首先,需要查看当前系统的环境变量,可以使用以下命令: echo $PATH 该命令会打印出当前系统环境变量中已经包含的路径。一般情况下,系统已经默认将一些常用的命令加入到环境变量中了。我们需要将自己需要使用的命令所在的路径加入到环境…

    other 2023年6月27日
    00
  • Win8系统玩LOL提示Client.exe-应用程序错误0xc0000045的原因及解决方法

    Win8系统玩LOL提示Client.exe-应用程序错误0xc0000045的原因及解决方法 如果你在使用Win8操作系统时,玩LOL游戏时出现了弹窗提示”Client.exe-应用程序错误0xc0000045″,那么很可能是由于系统兼容性问题,或者是游戏客户端本身存在问题所致。下面就为大家介绍两种可能的解决方法。 方法一:更改LOL游戏客户端兼容性设置 …

    other 2023年6月25日
    00
  • win7鼠标右键菜单如何删除呢?

    要删除Win7鼠标右键菜单,可以通过以下步骤进行操作: 1. 打开注册表编辑器 按下“Win + R”键,弹出运行窗口,输入“regedit”并回车打开注册表编辑器。 2. 定位到需要删除的项 在注册表编辑器中定位到需要删除的右键菜单,通常情况下,它们都位于以下路径: HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandle…

    other 2023年6月27日
    00
  • 基于http.server搭建局域网服务器过程解析

    下面是基于http.server模块搭建局域网服务器的完整攻略: 1. 环境安装 首先,我们需要安装Python,安装过程就不在这里赘述了,这里以Python 3为例。Python 3自带了http.server模块,无需额外安装。 2. 创建服务器 在本地电脑的某个文件夹下,打开终端或命令行窗口,在其中输入命令: python -m http.server…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部