1. 安装Zbar

sudo apt-get install libzbar-dev

2. 识别流程

  • 读取图像并转换为Zbar内建图像类型
  • 创建Zbar扫描器
  • 设置扫描参数
  • 扫描图像并获取结果
#include <zbar.h> // 仅能包含该头文件,其他头文件宏定义中写了不可用于使用
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("test.jpg"); // 读取图像 /*转换为Zbar内置图像类型*/
auto row = Gray.rows;
auto col = Gray.cols;
uchar *data = (uchar *)Gray.data;
/*创建Zbar图像, Image类型对象*/
Image code(col, row, "Y800", data, row * col); /*创建Zbar扫描器*/
ImageScanner scanner;
/*设置Zbar配置,这里设置的是条码二维码均可识别的模式,至于可选参数可以查看对应的枚举类型定义*/
scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1); /*扫描图像并获取结果*/
scanner.scan(code); // 返回值为: >0代表有条码/二维码被识别,0代表没有识别到,<0代表出错 /*输出识别结果,每一个二维码有三种属性,类型,内容以及在图像中的位置*/ struct ans // 暂存结果
{
string type;
string content;
vector<Point2f> points;
}
vector<ans> res;
/*一张图像中可能有多个码因此使用Zbar提供的迭代器类型进行访问*/
Image::SymbolIterator Symbol = code.symbol_begin();
for(; Symbol != code.symbol_end(); ++Symbol)
{
ans tmp;
tmp.type = Symbol->get_type();
tmp.content = Symbol->get_data();
for (int i = 0; i < Symbol->get_location_size(); i++)
tmp.points.push_back(Point2f(Symbol->get_location_x(i), Symbol->get_location_y(i)));
res.push_back(tmp);
} /*展示结果*/
for(int i = 0; i < res.size(); i++)
{
cout << "type: " << res[i].type << endl;
cout << "content: " << res[i].content << endl;
for(int j=0;j<res[i]..size();j++)
line(img,res[i].points[j],res[i].points[(j+1)%res[i].points.size()],Scalar(255,0, 0),4);
} }

3. cmake编写

如果使用findpackage去寻找zbar,是找不到的。

使用findpackage的前提是包在安装时提供了一个名为findXXX.cmake或者xxxconfig.cmake的文件且加到环境变量中。

但zbar等以下轻量库并没有提供这个文件,取而代之的是一个后缀为.pc的文件。

pkgconfig是linux下的一个包管理器,与cmake类似,它通过.pc后缀文件来去管理包,获取包的相关信息。

因此我们可以通过cmake调用pkgconfig来找到zbar的相关信息。

cmake_minimum_required(VERSION 3.5.1)

project(ZbarTest)
find_package(OpenCV REQUIRED) find_package(PkgConfig REQUIRED) # 找到pkgconfig
pkg_search_module(ZBAR REQUIRED zbar) # 通过pkgconfig查找zbar,然后就可以使用ZBAR_INCLUDE_DIRS和ZBAR_LIBRARIES变量了 add_executable(main QrCode.cpp)
target_include_directories(main PRIVATE ${OpenCV_INCLUDE_DIRS} ${ZBAR_INCLUDE_DIRS})
target_link_libraries(main PRIVATE ${OpenCV_LIBS} ${ZBAR_LIBRARIES} libMVSDK.so MvCamera)

Linux下二维码识别库Zbar的安装与使用的更多相关文章

  1. 【OpenWRT】增加第三方开源库 - 二维码开源库 zbar

    序言 第一次开始写博客,在日常学习和工作当中 CSDN 给我帮助很大,因此我也在 CSDN 奉献自己的经验,借此回馈 CSDN 对我的帮助,希望自己的经验可以帮助需要的人,也方便自己后续复习之用,同时 ...

  2. 有关python下二维码识别用法及识别率对比分析

    最近项目中用到二维码图片识别,在python下二维码识别,目前主要有三个模块:zbar .zbarlight.zxing. 1.三个模块的用法: #-*-coding=utf-8-*- import ...

  3. 二维码开源库zbar、zxing使用心得

    首先说明我的测试场景是“识别打印在纸上的二维码”,在扫描结果中寻找二维码并进行识别,而不是直接让摄像头对着二维码扫描. zbar和zxing用的都是自己从github上clone的c++源码/接口编译 ...

  4. DM二维码识别库DMDECODER的使用--MFC例程

    DM码和QR码是当今比较主流的二维码,其中QR码容量大,容量密度为16kb,DM码容量要小一点,可在仅仅25mm²的面积上编码30个数字,但是DM码的容错率更高,所以实际的工业生产中经常使用DM码作为 ...

  5. 第47章 QR-Decoder-OV5640二维码识别—零死角玩转STM32-F429系列

    第47章     QR-Decoder-OV5640二维码识别 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.y ...

  6. C#/.net 通过js调用系统相机进行拍照,图片无损压缩后进行二维码识别

    这两天撸了一个需求,通过 JS  调用手机后置相机,进行拍照扫码.前台实现调用手机相机,然后截取图片并上传到后台的功能.后台接收传过来的图片后,通过调用开源二维码识别库 ZXing 进行二维码数据解析 ...

  7. Python zxing 库解析(条形码二维码识别)

    各种扫码软件 最近要做个二维码识别的项目,查到二维码识别有好多开源的不开源的软件 http://www.oschina.net/project/tag/238/ Zbar 首先试了一下Zbar,pyt ...

  8. 基于opencv3.0和下的条形码与二维码识别

    其中对条码与二维码的识别分为以下4个步骤 1. 利用opencv和Zbar(或者Zxing)对标准的条形码图片(即没有多余背景干扰,且图片没有倾斜)进行解码,将解码信息显示出来,并与原始信息对比. 2 ...

  9. tornado zbar 二维码识别 ,配合nginx 反向代理,supervisord 监控

    tornado zbar 二维码识别 ,配合nginx 反向代理,supervisord 监控 1.zbar识别二维码程序,python2.6.6 #!/usr/bin/env python # co ...

  10. Opencv+Zbar二维码识别(二维码校正)

    二维码和车牌识别基本都会涉及到图像的校正,主要是形变和倾斜角度的校正,一种二维码的畸变如下图: 这个码用微信扫了一下,识别不出来,但是用Zbar还是可以准确识别的~~. 这里介绍一种二维码校正方法,通 ...

随机推荐

  1. CSS – 管理

    前言 CSS 有好几种写法. 它们最终出来的效果是一样的, 区别只是在你如何 "写" 和 "读" 或者说开发和维护. 这已经不是如何"实现" ...

  2. ChatGPT论文降重Prompt

    你是一个已经阅读过大量论文的论文写作专家.我正在设计一个基于xxx系统.接下来,我将给你一个论文段落,你可以使用调整句子用词.句子结构等方法,重新描述这段话,对文章的内容进行润色,使之更加接近论文的写 ...

  3. 《赵渝强》《Docker+Kubernetes容器实战派》新书上市!!!

    用一本书掌握Docker与Kubernetes核心内容!!! 本书基于作者多年的教学与实践经验编写,分为上下两篇,共20章. 上篇(第1-11章)介绍Docoker,包含:Docker入门.Docke ...

  4. 【赵渝强老师】Oracle数据库的存储结构

    Oracle的存储结构分为:物理存储结构和逻辑存储结构. 一.物理存储结构:指硬盘上存在的文件 数据文件(data file) 一个数据库可以由多个数据文件组成的,数据文件是真正存放数据库数据的.一个 ...

  5. 《Vue.js 设计与实现》读书笔记 - 第 4 章、响应系统的作用与实现

    第 4 章.响应系统的作用与实现 4.1 响应式数据与副作用 副作用函数就是会对外部造成影响的函数,比如修改了全局变量. 响应式:修改了某个值的时候,某个会读取该值的副作用函数能够自动重新执行. 4. ...

  6. USB-DFP UFP DRP模式

    USB Type-C 接口支持三种模式:DFP(Downstream Facing Port).UFP(Upstream Facing Port)和 DRP(Dual Role Port).虽然这些术 ...

  7. CRLF the next time Git touches it warning: in the working copy of '', LF will be replaced by CRLF the next time Git touches it warning: in the working copy of

    git config --global core.autocrlf true

  8. 静态库封装之ComStr类

    ComStr.h #pragma once #include <string> #include <vector> using namespace std; class Com ...

  9. 云原生周刊 | 使用 K8s 可视化工具集来调试业务 | 2023-1-30

    开源项目推荐 k8z k8z 意在 K8s 业务层面,提供一个方便好用的 K8s 集群可视化工具集.目前包含以下功能: 终端:连接到集群任意 Pod 容器上,方便调试 Tcpdump:对集群内容器进行 ...

  10. 使用notepad++批量在每行首尾添加内容

    1 简介 在程序员开发过程中,一个不错的工具是notepad++,该工具为notepad的增强,增强了许多的功能,包括程序员喜欢的列块编辑模式,支持众多的插件,例如json格式化,支持markdown ...