ZBar库 超级傻瓜配置,一套完美完成,超良心制作
首先给大家放一个链接:
Windows系统下ZBar库的配置(VS2015+OpenCV3.4.3+ZBar0.10)
我是看着上文配置成功的,不过我的环境是VS2017+opencv4.10,大家看自己需要进行参考吧,其实思路都一样。
最近在做一个opencv单目测距的小任务,而测距的对象,自然是二维码比较简单些,新版opencv也有二维码识别的库函数,不过看着网上的教程,就想试一试ZBar这个库。关于这个库,我就不多介绍了吧。
下载ZBer库文件
当然可以去官网下载了,不过我是按照上文博主给的百度云盘直接下的,ZBar库在官网上只有32位的,而我们计算机的需要的是64位的,这就需要我们自己改一些文件配置。索性上文博主已经为我们改好了:
直接下载修改好的压缩包文件。
链接:https://pan.baidu.com/s/1EAgiYF5S65QpWAnFWS5CrQ 提取码:jesa
配置环境变量
配置VS
在VS2017中新建一个空项目,在属性管理器中新建一个属性列表,作如下配置:
测试代码
新建一个工程,配置opencv和zbar属性表,运行下面代码可以完成识别二维码并打印二维码内容:
#include <zbar.h>
#include <opencv2\opencv.hpp>
#include <iostream>
int main(int argc, char*argv[])
{
zbar::ImageScanner scanner;
scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1);
cv::VideoCapture capture;
capture.open(0); //打开摄像头
cv::Mat image;
cv::Mat imageGray;
std::vector<cv::Point2f> obj_location;
bool flag = true;
if (!capture.isOpened())
{
std::cout << "cannot open cam!" << std::endl;
}
else
{
while (flag)
{
capture >> image;
cv::cvtColor(image, imageGray, CV_RGB2GRAY);
int width = imageGray.cols;
int height = imageGray.rows;
uchar *raw = (uchar *)imageGray.data;
zbar::Image imageZbar(width, height, "Y800", raw, width * height);
scanner.scan(imageZbar); //扫描条码
zbar::Image::SymbolIterator symbol = imageZbar.symbol_begin();
if (imageZbar.symbol_begin() != imageZbar.symbol_end()) //如果扫描到二维码
{
flag = false;
//解析二维码
for (int i = 0; i < symbol->get_location_size(); i++)
{
obj_location.push_back(cv::Point(symbol->get_location_x(i), symbol->get_location_y(i)));
}
for (int i = 0; i < obj_location.size(); i++)
{
cv::line(image, obj_location[i], obj_location[(i + 1) % obj_location.size()], cv::Scalar(255, 0, 0), 3);//定位条码
}
for (; symbol != imageZbar.symbol_end(); ++symbol)
{
std::cout << "Code Type: " << std::endl << symbol->get_type_name() << std::endl; //获取条码类型
std::cout << "Decode Result: " << std::endl << symbol->get_data() << std::endl; //解码
}
imageZbar.set_data(NULL, 0);
}
cv::imshow("Result", image);
cv::waitKey(50);
}
cv::waitKey();
}
return 0;
}
运行截图(鱼眼相机,没有消畸变,因此畸变有些严重):
作者介绍
我会在微信公众号【行走的机械人】上更新视觉的小干货,分享我在视觉的学习经验和知识。快来关注我吧,教你如何在技术和生活两方面做一个合格的理科男。
如果觉得本文对你有帮助,就动动手指点个赞吧,让更多的同学看到这篇文章。