一.问题描述

1.完成调用摄像头实现二维码扫码识别的功能原本的方案是Qt中使用QCamera调用摄像头,QZXing进行二维码识别,但是QCamera在一些电脑上无法打开摄像头,软件直接崩溃,这个问题找了很久,也使用qt官方的代码,QCamera打开某些摄像头仍然会使得软件直接崩溃,于是只有想办法用其他方案打开摄像头了.

方案一:ffmpeg打开摄像头.但是环境搭建和代码都比较复杂,放弃了.

方案二:opencv打开摄像头.qt上环境搭建比较麻烦,但是在VS2019+Qt上环境搭建就非常简单了.

2.QZXing在VS2019+Qt中不好使用,在qt中直接复制文件夹在.pro中加入.pri就行了,在VS中搞了好久没有一个合适的方案,问题太多,有好方案的小伙伴麻烦一起交流交流.于是我选择了zbar64进行二维码识别部分,环境搭建和使用方法也比较简单.注意系统是64位的选择zbar64,不然用不了.

二.环境搭建

Qt+VS2019环境搭建省略.

1.opencv3.4.1及zbar64下载

opencv3.4.1下载: https://opencv.org/releases/page/5/

下载不了可以使用我上传的:opencv3.4.1.zip

zbar下载:网上很多,但是不是64位的,zbar64我自己上传的:二维码编码解码库ZBar64.rar

2.环境变量配置:

右键“此电脑”——属性——高级系统设置——环境变量。

在系统变量中找到“Path”,编辑。

新建两个环境变量,找到opencv3.4.1和ZBar的bin目录

例如我的:

D:\opencv3.4.1\build\x64\vc14\bin
D:ZBar\bin

3.项目属性配置

在VS2019中新建项目,右键项目名—配置属性—VC++目录,在包含目录中加入opencv3.4.1和ZBar的include目录.

例如我的:

D:\ZBar\include
D:\opencv3.4.1\build\include\opencv2
D:\opencv3.4.1\build\include\opencv
D:\opencv3.4.1\build\include

在库目录中加入opencv3.4.1和ZBar的lib目录.

例如我的:

D:\ZBar\lib
D:\opencv3.4.1\build\x64\vc14\lib

链接器——输入,在附加依赖项中加入opencv3.4.1和ZBar的*.lib文件名:

opencv_world341d.lib
libzbar-0.lib
libzbar64-0.lib

三.调用摄像头设置

打开摄像头及格式转换核心代码:

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp> mainwindow::mainwindow(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);cv::VideoCapture cap;if(!cap.open(0))//0-前置摄像头,1-后置return;cv::Mat frame;while (1){        if (m_VideoCapture.read(frame)){     //OpenCV使用BGR,QImage使用RGB,通道转换               cv::cvtColor(m_MatRead, m_MatRGB, CV_BGR2RGB);//cv::Mat转QImageQImage image = QImage(m_MatRGB.data, m_MatRGB.cols, m_MatRGB.rows, QImage::Format_RGB888);ui.label_video->setPixmap(QPixmap::fromImage(image));}}
}

四.调用扫码识别

#include "zbar.h"
void mainwindow::sloQrDecode(cv::Mat image)
{zbar::ImageScanner scanner;//图片转换cv::Mat imageGray;cv::cvtColor(image, imageGray, CV_RGB2GRAY);int width = imageGray.cols;int height = imageGray.rows;uchar* raw = (uchar*)imageGray.data;zbar::Image imageZbar(width, height, "Y800", raw, width * height);scanner.scan(imageZbar); //扫描条码    zbar::Image::SymbolIterator symbol = imageZbar.symbol_begin();//扫描结果打印if (imageZbar.symbol_begin() == imageZbar.symbol_end()){qDebug() << "查询条码失败,请检查图片!";}for (; symbol != imageZbar.symbol_end(); ++symbol){qDebug() << "类型:" << QString::fromStdString(symbol->get_type_name());qDebug() << "条码:" << QString::fromStdString(symbol->get_data());}
}

简单的代码往往含有巨大的价值。

欢迎大家交流。

五.参考文献

还参考了一些文章已经忘了原链接了。

很有价值的一篇文章,感谢原博主,找了很久才看到这篇文章:

VS2010+OpenCV3.4.1+zbar 64位 - 格格_gloria - 博客园

Qt+VS+opencv+zbar打开本机摄像头实现二维码扫码识别功能相关推荐

  1. 【OpenCV 4开发详解】QR二维码检测

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  2. Python实现PC摄像头扫描二维码,让你的电脑变身QR码识读器!

    目录 简介: 源代码: 源代码说明: 效果如下所示: 简介: 使用PC摄像机扫描二维码可以有很多应用场景,例如: 支付宝.微信支付等移动支付方式需要使用二维码进行支付,PC摄像机可以扫描这些支付二维码 ...

  3. web/html5调用摄像头实现二维码扫描效果(代码实例)

    本文给大家介绍如何用web/html5调用摄像头实现二维码扫描的效果,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 利用html5(navigator.getUserMedia)调 ...

  4. h5端呼起摄像头扫描二维码并解析

    2016年6月29日补充: 最近做了一些与表单相关的项目,使用了h5的input控件,在使用过程中遇到了很多的坑.也包括与这篇文章相关的. 首先我们应该知道使用h5新提供的属性getUserMedia ...

  5. SLAM无人车通过上摄像头扫描二维码重定位

    SLAM无人车通过上摄像头扫描二维码重定位 slam 无人车扫描二维码重定位initpose 实现原理: 1.内参标定 2.外参标定得到相机相对于小车的安装坐标 3.通过功能包 ar_track_al ...

  6. PC端调用摄像头扫描二维码,拿到二维码信息

    PC端调用摄像头扫描二维码,拿到二维码信息 <template><el-dialogtitle="扫描设备二维码":visible.sync="dial ...

  7. C# 调用摄像头解析二维码

    上次的二维码项目中,在解析的时候用的是扫码枪自动解析并以键盘形式输出,二次开发及通用性不高.本次项目使用AForge库调用摄像头采集二维码照片,再使用ZXing库解析二维码,较之前通用性更高. 一.调 ...

  8. TCPIP远程网络电子健康码扫码设备|二维码扫码门禁机HX-QR86L-IP在校园复学防疫领域的应用

    TCPIP远程网络电子健康码扫码设备|二维码扫码门禁机HX-QR86L-IP是一款铝合金材质.带液晶显示屏,一机两用,即可做门禁读头使用,也可以做电子健康码数据采集使用.可支持静态.手机动态二维码识别 ...

  9. 能在Windows CE上运行的的二维码识别系统,使用手机摄像头扫描二维码

    欧美和日本,二维码的使用比较广泛,最近看到一则新闻,我们国家也在航空服务中使用二维码了.二维码具有信息容量大.纠错能力强.可靠性高.成本低.防伪性好.持久耐用等一维条码所不具备的优良特点.二维码的种类 ...

  10. C#生成二维码、调用摄像头扫描二维码

    二维码的生成和解码,有两个开源项目可以参考: 一个是google的zxing,另外一个是ThroughWork. zxing做的很全面,支持各种语言和平台,具体不多讲,自己查去.ThroughWork ...

最新文章

  1. 并查集 HDOJ 1232 畅通工程
  2. HDU2795 Billboard
  3. [vue] vue组件会在什么时候下被销毁?
  4. Python之XML解析详解
  5. 超级菜菜鸟全程架站攻略(Mysql+Apche+PHP+Phpmyadmin+Zend,含本机安装)
  6. geotools等值线生成
  7. protel DXP 2004
  8. 车牌识别算法实践(一):先验知识
  9. 一个简单的txt分割器
  10. 演讲实录 :某大型股份制商业银行的容器化探索之路
  11. 为什么Excel公式使用不了?
  12. 用户画像标签体系及实现方法
  13. C语言|博客作业07
  14. DataGridView获取当前选中的行与列的值
  15. 超透镜仿真案例(2)—— 宽带消色差 超构透镜模型 FDTD仿真超表面
  16. blender新手入门教程中文 编辑后属性选项显示
  17. 深度学习秋招面试题集锦(一)
  18. C# 基础之Linq编程
  19. 初识UAC(理论概括介绍)
  20. CF4A Watermelon(洛谷水题记)

热门文章

  1. b站黑马程序员的python怎么样_如何评价传智播客旗下的黑马程序员?
  2. Python数据处理Tips数据重复值处理常用方法
  3. PHP调用拼多多接口以及配置签名
  4. 中控H10考勤机管理员密码破解
  5. 计算机系统结构模拟试卷3,计算机系统结构全真模拟试卷.pdf
  6. python自动化测试工程师面试题(转载师傅:上海悠悠)
  7. python写一个木马_Python编写简易木马程序 - 博客频道 - CSDN.NET
  8. 3dsMax建模,卡线学习笔记
  9. SpringBoot 集成 TkMybatis
  10. 旅游景区如何利用优惠券提高客单价?