window32VC2010 Opencv zbar条码识别移植测试工程

最近项目需要识别二维码,之前移植的Zxing 库发现针对的项目的二维码无法识别,索性换zbar 试试。结果zbar可以完美识别出来,从而解决了现实需求。那针对zbar 在windows中如何应用呢,如下将记录一下zbar移植到VC工程中。此工程只为测试工程。

由于以前将该库移植到嵌入设备过。多少对此库有些了解。zbar 和 zxing 的优缺点,zbar 主要用的是C++, zxing 主要用的是java, zbar 可识别的条码类型没有zxing 丰富,zbar 无法识别datamatrix pdf417等条码。

一. 放入include 和 lib 到项目工程

     解压已编译好的windows zbar 库。在工程下面建立zbar头文件和lib 目录, 并 将头文件和拷贝到对应的目录

window32VC2010 Opencv zbar条码识别移植测试工程_第1张图片

zbarInclude:

window32VC2010 Opencv zbar条码识别移植测试工程_第2张图片

 

zbarlib:

window32VC2010 Opencv zbar条码识别移植测试工程_第3张图片

二. 添加项目工程属性配置

   这一步配置项目属性各种头文件和库的依赖。如果有添加库的经验,这一步应该很快搞定

1. 鼠标选择项目,右键属性。

window32VC2010 Opencv zbar条码识别移植测试工程_第4张图片

2. 弹出的属性页中选择 VC++  分别配置包含目录,引用目录和库目录。

window32VC2010 Opencv zbar条码识别移植测试工程_第5张图片

左键点击,选择下拉中的编辑,弹出添加对话框, 在对话框中新建一个,添加包含目录,点击确认。

window32VC2010 Opencv zbar条码识别移植测试工程_第6张图片

库文件目录也是如此设置。

3.添加附加依赖项:

window32VC2010 Opencv zbar条码识别移植测试工程_第7张图片

点击右边框,下拉选择编辑。然后将zbarlib 库的文件名复制贴在附加依赖项上,点击确认。

window32VC2010 Opencv zbar条码识别移植测试工程_第8张图片

 

最后再点击项目属性配置的 确认按钮 ,保存配置好的属性。

 

三. 添加测试代码

在工程主文件中添加测试代码:

注意:将文中的图片名,改成你自己的测试条码。


#include  
#include  
 
#include  
#include

using namespace std;
using namespace cv;
using namespace zbar;


int main()
{

	// 定义Zbar扫描的类   
	ImageScanner scanner;
	// 初始化  
	scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);
	// 加载二维码图像数据  
	Mat srcImage = imread("F:/build/opencv_zbar/image/outbarcodeImgs.jpeg");
	if (!srcImage.data) {
		cout << "Input image error!" << endl;
		system("pause");
		return 0;
	}
	//	Mat gg;
	//	resize(srcImage, gg,Size(800,800));

	Mat src_gray;
	cvtColor(srcImage, src_gray, CV_BGR2GRAY);
	int width = src_gray.cols;
	int height = src_gray.rows;
	// wrap the image  
	uchar *raw = (uchar*)src_gray.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;
		cout << "条码:" << endl << symbol->get_data() << endl;
	}

	imshow("原始二维码图片", srcImage);
	waitKey(0);
	imageZbar.set_data(NULL, 0);

	return 0;
}

拷贝 dll 库到 debug/ Relese 执行目录中:

window32VC2010 Opencv zbar条码识别移植测试工程_第9张图片

四. 识别结果展示

window32VC2010 Opencv zbar条码识别移植测试工程_第10张图片

 

 

你可能感兴趣的:(opensource)