本项目运用OpenCV和ZBar开源库实现摄像头实时扫描与解析二维码的功能,为用户提供高效便捷的信息读取体验。
使用OpenCV与zbar开源库可以实现摄像头识别二维码的功能,并且测试验证显示其识别率非常高。已开发出简单的应用实例并成功打包源码,在VS2013环境下能够完全编译通过,其中包括了OpenCV的库文件及zbar-0.10-setup.exe和zbar-0.10.tar.bz2下载包。
为了运行该Demo,需要先安装 zbar-0.10-setup.exe。以下代码示例可以完成整个流程的开发,并且也可以贡献积分以获取资源包。以下是实现此功能所需的具体步骤:
**环境准备**
(1)OpenCV库版本为2.49
(2)ZBar开源库
(3)VS2013
**VS2013环境配置**
在Visual Studio 2013中进行如下设置:
- 配置附加包含目录:C/C++ -- 附加包含目录 -> include\opencv\include\include\opencv\include\opencv/include/opencv/include/opencv2
- 设置链接器的附加库目录:lib32\opencv/lib;lib32
- 在“输入”选项中设置附加依赖项,包括 opencv_core249d.lib, opencv_highgui249d.lib, 和 opencv_imgproc249d.lib 以及 libzbar-0.lib
**代码开发**
在实现功能时需要包含以下头文件:
```cpp
#include
#include
#include
#include
#include
#include zbar\zbar.h
using namespace std;
using namespace zbar;
using namespace cv;
```
(1)定义`MatToCImage()`函数,用于将OpenCV的Mat对象转换为Windows CImage对象。
```cpp
void MatToCImage(cv::Mat &mat, CImage &cImage)
{
// 创建新的CImage实例并复制数据到其中...
}
```
(2)编写主程序代码实现摄像头图像采集和二维码识别功能:
```cpp
// 从摄像头读取视频流,进行缩放、转换为灰度图后使用zbar库扫描条形码或QR码。
cv::VideoCapture capture(0);
while (!m_bCloseCamera)
{
cv::Mat frame;
capture >> frame; // 获取一帧图像
cv::resize(frame, newframe, ResImgSiz); // 缩放处理
MatToCImage(newframe, imgDst);
ImageScanner scanner;
scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);
cvtColor(frame,imageGray,CV_RGB2GRAY); // 转换为灰度图像
zbar::Image imageZbar(width,height,Y800,raw,width*height);
scanner.scan(imageZbar); // 扫描条形码
}
```
以上代码示例展示了如何使用OpenCV和zBar库来实现摄像头识别二维码的功能。