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日

相关文章

  • java实习–每天打卡十道面试题!

    Java实习–每天打卡十道面试题攻略 如果你正在准备Java开发实习面试,这里有一个十分有用的攻略:每天打卡十道面试题! 前置条件 在开始使用这个攻略时,请确保你已经: 对Java的基本概念有一定的了解 学习过Java的核心类库 有一定的编程经验 攻略流程 第一步:寻找面试题 每天找十道跟实习相关的Java面试题(网上有很多资源)。你可以选择以下几种类型:…

    other 2023年6月27日
    00
  • Android使用kotlin实现多行文本上下滚动播放

    Android使用Kotlin实现多行文本上下滚动播放攻略 在Android应用中,我们可以使用Kotlin编程语言来实现多行文本的上下滚动播放效果。下面是一个详细的攻略,包含了两个示例说明。 步骤1:准备工作 首先,确保你的Android项目已经配置好了Kotlin支持。如果还没有,可以按照以下步骤进行配置: 在项目的build.gradle文件中,添加K…

    other 2023年9月6日
    00
  • python判定为空

    Python判定为空 在Python编程中,经常会遇到需要判断一个变量是否为空的情况。常见的空值包括None、空字符串、空列表、空字典、空元组等。本文将介绍在Python中判断各种空值的方法。 判断None 在Python中,用关键字None表示空值。当一个变量的值为None时,可以使用is或is not来判断。例如: a = None if a is No…

    其他 2023年3月28日
    00
  • vue怎么获取当前div的宽高

    Vue.js中如何获取当前div的宽高 在Vue.js中,获取当前div的宽高是一个普遍的需求。好在Vue.js提供了丰富的工具和方法来实现这个目标。 使用ref属性 我们可以使用Vue.js提供的ref属性来获取当前组件的DOM元素。ref属性作为一个指令,用于为子元素添加一个索引ID,使开发者可以在父组件中通过$refs对象引用这个子元素。 下面是一个简…

    其他 2023年3月28日
    00
  • layui(五)——form组件常见用法总结

    layui(五)——form组件常见用法总结 form组件是layui中常用的表单组件,可以用于快速构建各种表单。本文介绍layui中form组件的常见用法,包括表单元素、表单验证和示例说明。 表单元素 form组件中常用的表单元素包括input、select、checkbox、radio、switch等。具体法如下: input input是form组件中…

    other 2023年5月8日
    00
  • css 如何让大小不同的图片表现一致,同时自适应呢?

    CSS 如何让大小不同的图片表现一致,同时自适应呢? 在网站设计中,图片是重要的视觉元素。尤其是在响应式设计中,如何让大小不同的图片表现一致,同时自适应是非常重要的问题。本文将介绍一些CSS技术,可以帮助你解决这个问题。 1. 设置图片的宽度和高度 图片的宽度和高度是非常重要的,它们可以决定图片的大小和比例。我们可以设置图片的宽度和高度来让它们在不同的设备上…

    其他 2023年3月28日
    00
  • 简要解读Ruby面向对象编程中的作用域

    简要解读Ruby面向对象编程中的作用域 作用域是指在程序中定义变量的可见范围。Ruby面向对象编程中的作用域规则与其他编程语言有些不同。在本攻略中,我们将详细讲解Ruby中的作用域以及其在面向对象编程中的作用。 局部作用域 在Ruby中,局部变量的作用域限定在它们被定义的块内部。一个块可以是一个方法、一个类定义、一个模块定义或一个循环结构。在块内部定义的局部…

    other 2023年8月19日
    00
  • Ant Design of Vue的树形控件Tree的使用及说明

    Ant Design 是一款优秀的 React UI 库,它的 Vue 版本 Ant Design of Vue 同样也是备受欢迎的UI框架之一。Ant Design of Vue中提供了一种常用的可展开、可收起的树形控件 Tree,下面我来详细介绍如何使用及说明。 安装 可以通过 npm 或 yarn 安装 Ant Design of Vue。 使用 np…

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