引子
项目需要用到C++进行二维码识别,虽然手机上随便扫码就可以轻易识别出来,但是到了电脑上可就没有那么方便了。
我要做的是能够一下子把一张图片上的几十个二维码一下子识别出来,如果成功的话,那岂不是比用手机一张张扫码快许多啊。当然现在已经成功了,现在把配置过程记录一下。
我查阅了一大堆资料,识别二维码的方法有很多,基本上分为用zbar和zxing两种,但是对效果来看,zxing的识别更胜一筹,而且zbar已经停止更新了。那么,作为9012年的萌薪,当然是选择效果强大的zxing了啊。
方法一:zxing
- 原理
简单来讲,它先找二维码的三个角点,如果找到才会进行解码。
- 首先
我们需要一份包装包:zxing的安装库,这是C++版本的,将它下载到你的电脑上
- 编译安装
建立一个build的文件夹,编译,安装,命令行如下。
mkdir build
cd build
cmake ..
make
make install
这样就ok了。需要注意的是,CMakeLists.txt里面有OpenCV的依赖选项,所以最好提前配置好OpenCV。
4. 安装完成
如果你成功编译了,那么在build文件夹里面会有一个叫做libzxing.a文件,这就是你编译好的静态链接库,后面你想调用zxing的话就得把这个文件导进去。
5. 识别二维码
这里我编写了一个简单的函数,思想是,先用OpenCV imread函数读取图片,然后将其装换为灰度图,然后调用zxing的解码函数得到识别结果进行输出。
首先准备好CmakeLists.txt这个很基本,但很重要。
cmake_minimum_required (VERSION 3.1)
# Enable C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
# 调试模式
set(CMAKE_BUILD_TYPE "Debug")
project (newPipeLocation)
#这是我自己的OpenCV安装路径
set(OpenCV_DIR /usr/local)
# zxing
set(ZXing_DIR /usr/local)
find_package(OpenCV 4 REQUIRED)
include_directories(
${
OpenCV_DIR}/include
${
ZXing_DIR}/include/zxing
/home/wwh/Downloads/zxing-cpp/core/src
/home/wwh/Downloads/zxing-cpp/opencv/src
)
add_executable(main main.cpp