opencv+zbar配置实现简单的二维码和条形码识别

目录

0.准备工作

1.opencv配置

2.zbar配置

3.代码实现

4.效果

5.总结


0.准备工作

0.1我的实验配置:

win10+VS2015community+opencv2.4+zbar0.10

0.2资源下载:

opencv 2.4下载地址:https://opencv.org/opencv-v2-4-2-released.html

扫描二维码关注公众号,回复: 2660457 查看本文章

zbar0.10下载地址:http://zbar.sourceforge.net/download.html

0.2新建项目:

在vs中新建一个空项目,名字自己取一个。

1.opencv配置

            运行exe文件,实质解压操作,不用新建目录,因为会解压后就是一个opencv目录,记住opencv的路径,接下来就是环境配置。

1.1 include文件配置:

"项目"——>"属性"——>"属性"——>"配置属性"——>"项目属性"——>"VC++目录"——>"包含目录"中添加:

"你的安装路径"\opencv\build\include
"你的安装路径"\opencv\build\include\opencv
"你的安装路径"\opencv\build\include\opencv2

注意:这里有三个路径,路径要改成你自己opencv的安装路径,我的是在C盘根目录下,我的配置如下:

C:\opencv\build\include
C:\opencv\build\include\opencv
C:\opencv\build\include\opencv2

1.2 lib文件:

(1)"项目"——>"属性"——>"属性"——>"配置属性"——>"VC++目录"——>"库目录"中添加:

"你的安装路径"\opencv\build\x86\vc12\lib

注意:此处路径中x86可以改为x64,主要看你vs项目配置的属性,vc12也可以改为其他版本,如vc11等,最好用最新的版本,但是要查看一下目录中存不存在,不能添加不存在的路径。我的配置如下:

C:\opencv\build\x86\vc12\lib

(2)"项目"——>"属性"——>"属性"——>"配置属性"——>"VC++目录"——>"链接器"——>"输入"——>"附加依赖项"中添加:

添加你的lib路径下"你的安装路径"\opencv\build\x86\vc12\lib的所有lib文件的名字

注意:lib文件同名的有两种,一种是.lib,一种是d.lib,带d的是DEBUG模式下的版本,只有添加一种就行了,我的vs属性配置为debug,所以我是配置为:

opencv_calib3d2410d.lib
opencv_contrib2410d.lib
opencv_core2410d.lib
opencv_features2d2410d.lib
opencv_flann2410d.lib
opencv_gpu2410d.lib
opencv_highgui2410d.lib
opencv_imgproc2410d.lib
opencv_legacy2410d.lib
opencv_ml2410d.lib
opencv_nonfree2410d.lib
opencv_objdetect2410d.lib
opencv_ocl2410d.lib
opencv_photo2410d.lib
opencv_stitching2410d.lib
opencv_superres2410d.lib
opencv_ts2410d.lib
opencv_video2410d.lib
opencv_videostab2410d.lib

如果是release模式,配置应该为:

opencv_calib3d2410.lib
opencv_contrib2410.lib
opencv_core2410.lib
opencv_features2d2410.lib
opencv_flann2410.lib
opencv_gpu2410.lib
opencv_highgui2410.lib
opencv_imgproc2410.lib
opencv_legacy2410.lib
opencv_ml2410.lib
opencv_nonfree2410.lib
opencv_objdetect2410.lib
opencv_ocl2410.lib
opencv_photo2410.lib
opencv_stitching2410.lib
opencv_superres2410.lib
opencv_ts2410.lib
opencv_video2410.lib
opencv_videostab2410.lib

2.zbar配置

2.1include文件:

"项目"——>"属性"——>"属性"——>"配置属性"——>"项目属性"——>"VC++目录"——>"包含目录"中添加:

"你的安装路径"\ZBar\include

我的配置为:

C:\Program Files (x86)\ZBar\include

2.2lib文件:

"项目"——>"属性"——>"属性"——>"配置属性"——>"VC++目录"——>"库目录"中添加:

"你的安装路径"\ZBar\lib

我的配置为:

C:\Program Files (x86)\ZBar\lib 

"项目"——>"属性"——>"属性"——>"配置属性"——>"VC++目录"——>"链接器"——>"输入"——>"附加依赖项"中添加:

libzbar-0.lib

3.代码实现

在项目中的main()函数中添加一面的代码,并把图片路径修改成自己的。

#include<core/core.hpp>
#include<highgui/highgui.hpp>
#include "zbar.h"      
#include "cv.h"      
#include "highgui.h"      
#include <iostream>      

using namespace std;
using namespace zbar;  //添加zbar名称空间    
using namespace cv;

int main(int argc, char*argv[])
{
	//定义扫描器
	ImageScanner scanner;
	scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);

	//加载图片
	Mat image = imread("qrcode.jpg");//请更改图片,可以使用据对路径或相对路径
	if (!image.data)
	{
		cout << "请确认图片" << endl;
		system("pause");
		return 0;
	}

	//图片转换
	Mat imageGray;
	cvtColor(image, imageGray, CV_RGB2GRAY);
	int width = imageGray.cols;
	int height = imageGray.rows;
	uchar *raw = (uchar *)imageGray.data;

	Image imageZbar(width, height, "Y800", raw, width * height);
	scanner.scan(imageZbar); //扫描条码    
	Image::SymbolIterator symbol = imageZbar.symbol_begin();
    //扫描结果打印
	if (imageZbar.symbol_begin() == imageZbar.symbol_end())
	{
		cout << "查询条码失败,请检查图片!" << endl;
	}
	for (; symbol != imageZbar.symbol_end(); ++symbol)
	{
		cout << "类型:" << endl << symbol->get_type_name() << endl << endl;
		cout << "条码:" << endl << symbol->get_data() << endl << endl;
	}

	//显示二维码
	imshow("Source Image", image);
	waitKey();
	imageZbar.set_data(NULL, 0);//清除缓存
	return 0;
}

4.效果

4.1二维码识别效果

4.2条形码别效果

5.总结

本文描述的是简单情况下的条形码和二维码识别,即不涉及倾斜的二维码、图片中有两个码等情况,更多复杂情况还得加更多的预处理,比如用仿射变换对倾斜二维码进行矫正等。

猜你喜欢

转载自blog.csdn.net/chenyuping333/article/details/81279433