1.安装Zxing
- 下载源码,Github下载地址(下面两个随便选一个应该都行吧)
https://github.com/glassechidna/zxing-cpp
https://github.com/yongleex/zxing-cpp - 在目录下新建build目录,切换到build目录下
mkdir build
cd ./build
- cmake一下
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-std=c++11" ..
说明:不采用c++11标准,好像有错.
- make一下, make install
make
sudo make install
说明:make过程中可能有错,仔细看了下是Opencv的版本问题,把报错的位置"CV_"去掉,把"CV_BGR2GRAY"换成"COLOR_BGR2GRAY"后,继续"make".
所有命令成功执行,说明zxing安装成功;
2. C++调用zxing
- CMakeLists.txt文件的编写
project(threads)
set(CMAKE_CXX_STANDARD 11)
set(Zxing_INCLUDE_DIRS /usr/local/include/zxing) #指定*.h文件目录位置
set(Zxing_LIBS /usr/local/lib/libzxing.a) # 指定*.a文件(居然是静态连接库)
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(${Zxing_INCLUDE_DIRS}) # 添加头文件*.h
find_package(OpenCV REQUIRED)
add_executable(threads test_threads.cpp)
target_link_libraries(threads ${OpenCV_LIBS} ${Zxing_LIBS} ) # 添加库文件*.a(很重要的)
- cpp文件的#include编写
#include <zxing/common/Counted.h>
#include <zxing/Binarizer.h>
#include <zxing/MultiFormatReader.h>
#include <zxing/Result.h>
#include <zxing/ReaderException.h>
#include <zxing/common/GlobalHistogramBinarizer.h>
#include <zxing/Exception.h>
#include <zxing/common/IllegalArgumentException.h>
#include <zxing/BinaryBitmap.h>
#include <zxing/DecodeHints.h>
#include <zxing/qrcode/QRCodeReader.h>
#include <zxing/MultiFormatReader.h>
#include <zxing/MatSource.h>
#include <zxing/datamatrix/DataMatrixReader.h>
好像没有什么问题!说明一切顺利,那么下面将用一张实际图像进行测试!
3. zxing识别Data Matrix的实例
参考博客 如何在visual studio下编译zxing cpp,以及zxing c++的使用
#include <iostream>
#include <string>
#include <zxing/common/Counted.h>
#include <zxing/Binarizer.h>
#include <zxing/MultiFormatReader.h>
#include <zxing/Result.h>
#include <zxing/ReaderException.h>
#include <zxing/common/GlobalHistogramBinarizer.h>
#include <zxing/Exception.h>
#include <zxing/common/IllegalArgumentException.h>
#include <zxing/BinaryBitmap.h>
#include <zxing/DecodeHints.h>
#include <zxing/qrcode/QRCodeReader.h>
#include <zxing/MultiFormatReader.h>
#include <zxing/MatSource.h>
#include <zxing/datamatrix/DataMatrixReader.h>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main() {
// step 1.读图并转换为灰度图
std::string image_name = "../test3.png";
cv::Mat matSrc = cv::imread(image_name, 1);
if (!matSrc.data) {
fprintf(stderr, "read image error: %s", image_name.c_str());
return -1;
}
cv::Mat matGray;
cv::cvtColor(matSrc, matGray, COLOR_BGR2GRAY);
try {
zxing::Ref<zxing::LuminanceSource> source = MatSource::create(matGray);
int width = source->getWidth();
int height = source->getHeight();
fprintf(stderr, "image width: %d, height: %d\n", width, height);
zxing::Ref<zxing::Reader> reader;
reader.reset(new zxing::datamatrix::DataMatrixReader);
zxing::Ref<zxing::Binarizer> binarizer(new zxing::GlobalHistogramBinarizer(source));
zxing::Ref<zxing::BinaryBitmap> bitmap(new zxing::BinaryBitmap(binarizer));
//开始解码
zxing::Ref<zxing::Result> result(
reader->decode(bitmap, zxing::DecodeHints(zxing::DecodeHints::DATA_MATRIX_HINT)));
std::string str2 = result->getText()->getText();
cout << str2.data();
}
catch (zxing::Exception &e) {
//Export your failure to read the code here
cerr << "Read Error: " << e.what() << endl;
}
}
网友评论