Qt+VS+opencv+zbar打开本机摄像头实现二维码扫码识别功能
一.问题描述
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打开本机摄像头实现二维码扫码识别功能相关推荐
- 【OpenCV 4开发详解】QR二维码检测
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- Python实现PC摄像头扫描二维码,让你的电脑变身QR码识读器!
目录 简介: 源代码: 源代码说明: 效果如下所示: 简介: 使用PC摄像机扫描二维码可以有很多应用场景,例如: 支付宝.微信支付等移动支付方式需要使用二维码进行支付,PC摄像机可以扫描这些支付二维码 ...
- web/html5调用摄像头实现二维码扫描效果(代码实例)
本文给大家介绍如何用web/html5调用摄像头实现二维码扫描的效果,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 利用html5(navigator.getUserMedia)调 ...
- h5端呼起摄像头扫描二维码并解析
2016年6月29日补充: 最近做了一些与表单相关的项目,使用了h5的input控件,在使用过程中遇到了很多的坑.也包括与这篇文章相关的. 首先我们应该知道使用h5新提供的属性getUserMedia ...
- SLAM无人车通过上摄像头扫描二维码重定位
SLAM无人车通过上摄像头扫描二维码重定位 slam 无人车扫描二维码重定位initpose 实现原理: 1.内参标定 2.外参标定得到相机相对于小车的安装坐标 3.通过功能包 ar_track_al ...
- PC端调用摄像头扫描二维码,拿到二维码信息
PC端调用摄像头扫描二维码,拿到二维码信息 <template><el-dialogtitle="扫描设备二维码":visible.sync="dial ...
- C# 调用摄像头解析二维码
上次的二维码项目中,在解析的时候用的是扫码枪自动解析并以键盘形式输出,二次开发及通用性不高.本次项目使用AForge库调用摄像头采集二维码照片,再使用ZXing库解析二维码,较之前通用性更高. 一.调 ...
- TCPIP远程网络电子健康码扫码设备|二维码扫码门禁机HX-QR86L-IP在校园复学防疫领域的应用
TCPIP远程网络电子健康码扫码设备|二维码扫码门禁机HX-QR86L-IP是一款铝合金材质.带液晶显示屏,一机两用,即可做门禁读头使用,也可以做电子健康码数据采集使用.可支持静态.手机动态二维码识别 ...
- 能在Windows CE上运行的的二维码识别系统,使用手机摄像头扫描二维码
欧美和日本,二维码的使用比较广泛,最近看到一则新闻,我们国家也在航空服务中使用二维码了.二维码具有信息容量大.纠错能力强.可靠性高.成本低.防伪性好.持久耐用等一维条码所不具备的优良特点.二维码的种类 ...
- C#生成二维码、调用摄像头扫描二维码
二维码的生成和解码,有两个开源项目可以参考: 一个是google的zxing,另外一个是ThroughWork. zxing做的很全面,支持各种语言和平台,具体不多讲,自己查去.ThroughWork ...
最新文章
- 并查集 HDOJ 1232 畅通工程
- HDU2795 Billboard
- [vue] vue组件会在什么时候下被销毁?
- Python之XML解析详解
- 超级菜菜鸟全程架站攻略(Mysql+Apche+PHP+Phpmyadmin+Zend,含本机安装)
- geotools等值线生成
- protel DXP 2004
- 车牌识别算法实践(一):先验知识
- 一个简单的txt分割器
- 演讲实录 :某大型股份制商业银行的容器化探索之路
- 为什么Excel公式使用不了?
- 用户画像标签体系及实现方法
- C语言|博客作业07
- DataGridView获取当前选中的行与列的值
- 超透镜仿真案例(2)—— 宽带消色差 超构透镜模型 FDTD仿真超表面
- blender新手入门教程中文 编辑后属性选项显示
- 深度学习秋招面试题集锦(一)
- C# 基础之Linq编程
- 初识UAC(理论概括介绍)
- CF4A Watermelon(洛谷水题记)