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. Ubuntu Server 部署 FRP 反向代理

    踩坑记录 我使用的配置文件是官方提供的示例配置文件 通过 SSH 访问内网机器,应该没有问题. 第一次我使用 Docker 镜像 snowdreamtech/frps 在服务器上部署 frps,发现始 ...

  2. 【已解决】如果将MySQL数据库中的表生成PDM

    数据库表PDM关系图 |  原创作者/编辑:凯哥Java |  分类:经验分享 有时候,我们需要MySQL数据库中的表生成对应的PDM文件,这里凯哥就讲讲第一种将MySQL数据库的表生成对应的PDM文 ...

  3. Nuxt Kit 的使用指南:模块创建与管理

    title: Nuxt Kit 的使用指南:模块创建与管理 date: 2024/9/11 updated: 2024/9/11 author: cmdragon excerpt: 摘要:本文是关于N ...

  4. EF Core – 大杂烩

    前言 记入一些零零碎碎的知识. Shadow Properties 参考:Docs – Shadow and Indexer Properties Shadow Property 指的是那些在数据库有 ...

  5. C# – class, filed, property, const, readonly, get, set, init, required 使用基础

    前言 心血来潮,这篇讲点基础的东西. Field 比起 Property,Field 很不起眼,你若问 JavaScript,它甚至都没有 Field. 但在 C#,class 里头真正装 value ...

  6. C# – delegate, event, EventHandler

    前言 写这么多年 C#, 我从来没有写过 EventHandler. 我想应该是因为我没有用 C# 开发过前端的关系, 绝对不是我技术不行哦. 这篇就补上一个学习笔记呗. 参考 C#知识点讲解之C#d ...

  7. CSS & JS Effect – Show More

    效果 show more 是很常被使用的效果, 因为空间总是不够的丫. 比起 scroll, show more 的体验通常会好一些, 尤其在手机, 它有更好的引导. 实现思路   1. 卡片需要一个 ...

  8. 【赵渝强老师】Redis的RDB持久化

    Redis 提供了多种不同级别的持久化方式: RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF (Append-only file) ...

  9. SVN(Linux)提交时强制写日志

    SVN(Linux)提交时强制写日志 1.创建并修改pre-commit文件 进入svn/code/hooks目录,在svn版本库的hooks文件夹下面,复制模版pre-commit.tmplcp p ...

  10. iotdb时序数据库常见使用命令

    docker 安装IOTDB核心代码: #docker启动 docker run -d -p 6667:6667 -p 31999:31999 -p 8181:8181 --name some-iot ...