基于Linux zbar二维码识别库编译和Linux Opencv编译安装基础上,实现Opencv+zbar实现二维码、条形码识别

  1. 代码结构
eric@eric-PC:~/Documents/work/linux-c/opencv$ tree
.
├── Makefile
├── picture
│   ├── 2Code.png
│   ├── barCode.jpg
│   ├── QRcode.jpg
│   └── test.jpg
└── src└── main.cpp2 directories, 6 files

QRcode.jpg:二维码
barCode.jpg:条形码
2Code.png,二维码+条形码

  1. main.cpp
#include "iostream"
#include "opencv2/opencv.hpp"
#include "zbar.h"  using namespace std;
using namespace cv;
using namespace zbar;#define WINDOW_NAME "clor"
#define WINDOW_GARY_NAME "gary"int main()
{namedWindow(WINDOW_NAME, WINDOW_AUTOSIZE);namedWindow(WINDOW_GARY_NAME, WINDOW_AUTOSIZE);// 加载二维码图片Mat image;// image = imread("./picture/test.jpg");image = imread("./picture/QRcode.jpg");// image = imread("./picture/barCode.jpg");// image = imread("./picture/2Code.png");// image = Mat(240,320,CV_8UC3,Scalar(0,255,0));cout << "---------------- 图像参数 ------------------"<<endl;// 标志位cout << "flags:" << image.flags << endl;// 图像尺寸cout << "size:" << image.size << endl;// 列宽cout << "clos:" << image.cols<<endl;// 行高cout << "rows:" << image.rows << endl;// 维度cout << "dims:" << image.dims << endl;cout << "------------------------------------------"<<endl;imshow(WINDOW_NAME,image);// 灰度转换Mat imageGray;cvtColor(image, imageGray, COLOR_RGB2GRAY);imshow(WINDOW_GARY_NAME,imageGray);// 获取二进制数据int width = imageGray.cols;int height = imageGray.rows;uchar *raw = (uchar *)imageGray.data;Image imageZbar = Image(width, height, "Y800", raw, width * height);// 配置扫描器,开始扫描ImageScanner scanner;scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);scanner.scan(imageZbar);    // 扫描结果打印if (imageZbar.symbol_begin() == imageZbar.symbol_end()){cout << "识别错误!" << endl;}// 遍历所有识别到的二维码后者条形码Image::SymbolIterator symbol = imageZbar.get_symbols();for (; symbol != imageZbar.symbol_end(); ++symbol){cout << "类型:\t" << symbol->get_type_name() << endl;cout << "条码:\t" << symbol->get_data() << endl << endl;}// 释放资源imageZbar.set_data(NULL, 0);waitKey(0);return 0;
}
  1. Makefile
######################################
# eric
######################################## 指定编译工具
CC  = gcc
CPP = g++
RM  = rm -rf## 源文件路径(默认检索3层)
SRC_PATH    := ./src
DIRS    := $(shell find $(SRC_PATH) -maxdepth 3 -type d)## 目标文件名称
TARGET  := main## 获取所有.c文件路径
SRCS    += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.c))
SRCPPS  += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cpp))## 所有对应目标文件
OBJS    := $(SRCS:.c=.o) $(SRCPPS:.cpp=.o)## 所有用到的库
LIBS    := pthread m  # mbedtls mbedcrypto mbedx509## 指定头文件路径
INCLUDE_PATH    := . $(DIRS) #/usr/local/include/opencv4/## 指定库文件路径
LIB_PATH    := /lib /usr/local/lib #./libmbedtls## 编译参数初始化
CFLAGS      := -g -O3 -pthread #-Wall## 加载头文件路径
CFLAGS      += $(foreach dir, $(INCLUDE_PATH), -I$(dir))
CFLAGS      +=  `pkg-config --cflags --libs opencv`
CFLAGS      +=  `pkg-config --cflags --libs zbar` ## 加载库文件路径
LDFLAGS     += $(foreach libdir, $(LIB_PATH), -L$(libdir))## 加载库文件
LDFLAGS     += $(foreach lib, $(LIBS), -l$(lib)).PHONY:allall: $(TARGET) $(TARGET) :$(OBJS)@$(CPP) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS)@#$(RM) $(OBJS)@echo =============================@echo $(TARGET) ok%.o    : %.c@echo srcs=$(SRCS)@echo $@...@$(CC) -c $(CFLAGS) $< -o $@%.o  : %.cpp@echo srcpps=$(SRCPPS)@echo LDFLAGS=$(LDFLAGS)@echo OBJS=$(OBJS)@echo $@...@$(CPP) -c $(CFLAGS) $< -o $@ # %.o  : %.S
#     $(CC) -c $(CFLAGS) $< -o $@.PHONY:clean
clean:$(RM) $(OBJS) $(TARGET)
  1. 编译&测试
eric@eric-PC:~/Documents/work/linux-c/opencv$ make
srcpps= ./src/main.cpp
LDFLAGS= -L/lib -L/usr/local/lib -lpthread -lm
OBJS= ./src/main.o
src/main.o...
=============================
main ok
eric@eric-PC:~/Documents/work/linux-c/opencv$ ./main (clor:130149): Gtk-WARNING **: 13:53:08.378: 无法在模块路径中找到主题引擎:“adwaita”,(clor:130149): Gtk-WARNING **: 13:53:08.378: 无法在模块路径中找到主题引擎:“adwaita”,
---------------- 图像参数 ------------------
flags:1124024336
size:260 x 260
clos:260
rows:260
dims:2
------------------------------------------
类型:  QR-Code
条码:  www.baidu.comeric@eric-PC:~/Documents/work/linux-c/opencv$

Linux Opencv+zBar二维码识别相关推荐

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

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

  2. Opencv+Zbar二维码识别(标准条形码/二维码识别)

    使用Opencv+Zbar组合可以很容易的识别图片中的二维码,特别是标准的二维码,这里标准指的是二维码成像清晰,图片中二维码的空间占比在40%~100%之间,这样标准的图片,Zbar识别起来很容易,不 ...

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

    一维码由一组规则排列的黑色线条.白色线条以及对应的字符组成.对倾斜的(没有严重形变)一维码的角度校正,可以根据其黑白相间.排列规则的特点,计算傅里叶频谱,通过傅里叶频谱中直线的倾斜角度计算空间域图像一 ...

  4. 【OpenCV】二维码识别

    文章目录 前言 一.OpenCV自带二维码识别功能 二.使用pyzbar识别 三.串口发送数据 四.播放音乐 总结 前言 最终实现视频动态识别二维码. 一.OpenCV自带二维码识别功能 import ...

  5. Linux zbar二维码识别库编译

    ZBar是一个开源软件套件,用于从各种来源读取条形码,例如视频流,图像文件和原始强度传感器.它支持许多流行的符号体系 (条形码的类型),包括EAN-13 / UPC-A,UPC-E,EAN-8,Cod ...

  6. OpenCV+Zbar二维码及条形码识别

    OpenCV搭配Zbar进行二维码及条形码识别 先上代码 #include<Windows.h> #include <iostream> #include<zbar.h& ...

  7. Opencv之二维码识别---QRCodeDetector

    OpenCV在对象检测模块中QRCodeDetector有两个相关API分别实现二维码检测与二维码解析: # 检测二维码 bool cv::QRCodeDetector::detect(InputAr ...

  8. CameraX 下使用 OpenCV 微信二维码识别

    前言 前面,我们已经介绍了两种集成 wechat_qrcode 微信二维码识别能力的做法: 完整编译 OpenCV 和 OpenCV Contrib Native C++ 单独集成 wechat_qr ...

  9. Jetson nano 摄像头二维码识别 Opencv zbar QT

    环境以及前言 环境 jetson nano Linux ubuntu 18.4 QT版本 QT5.98 摄像头 Csi摄像头 Opencv Jetson nano 自带的-.- 应该是4.1?不太清楚 ...

  10. 基于ZBar,OpenCV和Python的二维码识别

    0 前言 今天分享一个之前做过的二维码识别,参考:https://www.pyimagesearch.com/2018/05/21/an-opencv-barcode-and-qr-code-scan ...

最新文章

  1. java se 7u67_Linux下安装jdk-7u67-linux-x64.rpm
  2. [译]Chipmunk 教程2 - 基本概念
  3. 数组的升序排序 字符串的方法 0308
  4. google谷歌官方的上拉刷新(可变的颜色)
  5. 解决修改sources.list之后update NO_PUBKEY错误
  6. 计算机发展史的内容概述,计算机及其发展史概述
  7. 经济日报:法定数字货币的推出将会大大压缩比特币的投资空间
  8. Active Directory备份与还原
  9. 模拟linux内核异常,Linux内核异常
  10. Java中的List、Set、Map
  11. 实验一:Guass列选主元消去法之C语言代码
  12. maya中实时置换效果 dx11shader
  13. 电子产品销售数据分析及RFM用户价值分析
  14. 你真的理解了MVC, MVP, MVVM吗?
  15. 学校计算机社团面试自我介绍ppt,大学生大一社团面试自我介绍PPT
  16. python如何绘制饼图_Python使用Plotly绘图工具,绘制饼图
  17. 中小学校园气象站建设方案 作用 选址 组成
  18. bit,Byte,Word,DWORD(DOUBLE WORD,DW)
  19. 数据分析报告常见步骤
  20. VMWare虚拟机下载|最新版|破解版

热门文章

  1. android界面设计开发总结
  2. 【零代码工具】15 款企业级零代码开发平台推荐,总有一款是你心仪的
  3. 答题拿奖两不误:华为云知乎金牌答题官,就是你!
  4. 共享文件夹——Window与linux
  5. promise是什么?
  6. 免费logo设计在线生成(不定时更新)
  7. python中的value是什么意思_python中p-value的实现方式
  8. 电驴服务器搜索文件排序,电驴怎么连接服务器 电驴eMule怎么搜索文件
  9. 交大网院计算机第五次作业答案,2015交大网院计算机第三次作业word操作题
  10. 粘贴时word左下角出现“正在与服务器联系以获取信息,按ESC取消”