生成zxing
下载zxing,zxing-cpp-master
 https://github.com/zxing-cpp/zxing-cpp
Cmake生成项目,点Generate,把OpenCV_DIR修改了,NameValue没有报红就点Generate。然后点Open Project打开项目。
 
 打开项目后,右击解决方案属性页,勾选后再生成解决方案。
 
 
 全部生成成功后,新建一个文件夹zxing-cpp,下面有include和lib文件夹,include下再放个zxing文件夹。
 
 
复制D:/zxing-cpp-master-build/core/Debug/ZXing.lib到D:\zxing-cpp\lib文件夹下。
 复制D:\zxing-cpp-master\core\src下的所有文件到D:\zxing-cpp\include\zxing文件夹下。
配置项目
新建一个项目,配置属性页
 C++ ->常规-> 附加包含目录 D:\zxing-cpp\include
 链接器 ->常规 -> 附加库目录 D:\zxing-cpp\lib
 链接器 ->输入-> 附加依赖项 ZXing.lib
 复制D:\zxing-cpp-master-build\core\Debug\ZXing.dll到 自己项目的Debug目录下( …\TestZxing\x64\Debug)。
测试代码
已有opencv、zxing的环境下:
#include <opencv2/opencv.hpp>
#include <zxing/ReadBarcode.h>
using namespace ZXing;
using namespace cv;
struct decodeResStruct {
	Point pt1, pt2, pt3, pt4;
	String strQRDecode;
	decodeResStruct() {
	}
	decodeResStruct(Point pt1_, Point pt2_, Point pt3_, Point pt4_, String strQRDecode_) {
		pt1 = pt1_;
		pt2 = pt2_;
		pt3 = pt3_;
		pt4 = pt4_;
		strQRDecode = strQRDecode_;
	}
};
std::vector<decodeResStruct> resDecoded;//结果集
int main() {
	Mat src = imread("D:/test.bmp");
	auto fmt = ImageFormat::None;
	switch (src.channels()) {
	case 1: fmt = ImageFormat::Lum; break;
	case 3: fmt = ImageFormat::BGR; break;
	case 4: fmt = ImageFormat::BGRX; break;
	}
	ZXing::DecodeHints hints;
	ZXing::BarcodeFormats format = BarcodeFormat::QRCode;
	hints.setFormats(format);
	ImageView image{ src.data, src.cols, src.rows, fmt};
	ZXing::Results z_results = ReadBarcodes(image, hints);
	for (auto&& result : z_results) {
		const ZXing::Position pos = result.position();
		Point pt1 = { (int)pos[0].x,(int)pos[0].y };
		Point pt2 = { (int)pos[1].x,(int)pos[1].y };
		Point pt3 = { (int)pos[2].x,(int)pos[2].y };
		Point pt4 = { (int)pos[3].x,(int)pos[3].y };
		decodeResStruct stru = decodeResStruct{ pt1, pt2, pt3, pt4, result.text()};
		resDecoded.push_back(stru);
	}
	for (auto one : resDecoded) {
		line(src, one.pt1, one.pt2, Scalar(0, 255, 0), 2);
		line(src, one.pt2, one.pt3, Scalar(0, 255, 0), 2);
		line(src, one.pt3, one.pt4, Scalar(0, 255, 0), 2);
		line(src, one.pt4, one.pt1, Scalar(0, 255, 0), 2);
		putText(src, one.strQRDecode, one.pt1, 0, 0.5, Scalar(255, 0, 0), 2);
	}
	imshow("res", src);
	waitKey();
}



















