目录
0.准备工作
1.opencv配置
2.zbar配置
3.代码实现
4.效果
5.总结
0.1我的实验配置:
win10+VS2015community+opencv2.4+zbar0.10
0.2资源下载:
opencv 2.4下载地址:https://opencv.org/opencv-v2-4-2-released.html
zbar0.10下载地址:http://zbar.sourceforge.net/download.html
0.2新建项目:
在vs中新建一个空项目,名字自己取一个。
运行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.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
在项目中的main()函数中添加一面的代码,并把图片路径修改成自己的。
#include
#include
#include "zbar.h"
#include "cv.h"
#include "highgui.h"
#include
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.1二维码识别效果
4.2条形码别效果
本文描述的是简单情况下的条形码和二维码识别,即不涉及倾斜的二维码、图片中有两个码等情况,更多复杂情况还得加更多的预处理,比如用仿射变换对倾斜二维码进行矫正等。