您的位置:首页 > 运维架构

ZBar在Windows上的使用(2)-OpenCV

2015-10-20 11:49 253 查看
安装完ZBar和ImageMagick++后,发现ImageMagick只是用来打开图片,转换成统一的灰度矩阵数据。所以这次我尝试用OpenCV来实现ImageMagick的功能。

1.删除工程属性中ImageMagick的相关设置,增加OpenCV的设置。

我的OpenCV版本是2.4.9。OpenCV安装请参考

http://www.cnblogs.com/freedomshe/archive/2012/04/25/2470540.html

1.VC++目录->可执行文件目录

C:\Program Files\opencv\build\x86\vc10\bin;


2.C/C++->常规->附加包含目录

C:\Program Files\opencv\build\include;


3.链接器->常规->附加库目录

C:\Program Files\opencv\build\x86\vc10\lib


4.链接器->输入->附加依赖性

opencv_calib3d249d.lib

opencv_contrib249d.lib

opencv_core249d.lib

opencv_features2d249d.lib

opencv_flann249d.lib

opencv_gpu249d.lib

opencv_highgui249d.lib

opencv_imgproc249d.lib

opencv_legacy249d.lib

opencv_ml249d.lib

opencv_objdetect249d.lib

opencv_ts249d.lib

opencv_video249d.lib










2.修改源码如下

#include <iostream>
//#include <Magick++.h>
#include <zbar.h>
#define STR(s) #s
#include <opencv2/opencv.hpp>

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

int main (int argc, char **argv)
{
//if(argc < 2) return(1);
// #ifdef MAGICK_HOME
//     // http://www.imagemagick.org/Magick++/ //     //    under Windows it is necessary to initialize the ImageMagick
//     //    library prior to using the Magick++ library
//     Magick::InitializeMagick(MAGICK_HOME);
// #endif
// create a reader
ImageScanner scanner;
// configure the reader
scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);
// obtain image data
// Magick::Image magick("barcode.png");  // read an image file
//     int width = magick.columns();   // extract dimensions
//     int height = magick.rows();
//     Magick::Blob blob;              // extract the raw data
//     magick.modifyImage();
//     magick.write(&blob, "GRAY", 8);
//     const void *raw = blob.data();
cv::Mat img = cv::imread("barcode.png");
cv::Mat imgGray ;
imgGray.create(img.size(),CV_8UC1);
cvtColor(img,imgGray,CV_BGR2GRAY);
int width = imgGray.cols;   // extract dimensions
int height = imgGray.rows;
// wrap image data
// Image image(width, height, "Y800", raw, width * height);
Image image(width, height, "Y800", imgGray.data, width * height);
// scan the image for barcodes
int n = scanner.scan(image);
// extract results
for(Image::SymbolIterator symbol = image.symbol_begin();
symbol != image.symbol_end();
++symbol) {
// do something useful with results
cout << "decoded " << symbol->get_type_name()
<< " symbol \"" << symbol->get_data() << '"' << endl;
}
// clean up
image.set_data(NULL, 0);

return(0);
}


3.修改完成后运行出现fopen.c中if(*file==_T(‘\0’))的报错

修改属性C/C++->预处理器->预处理器定义将NDEBUG改成_DEBUG



4.完成!

用更多图片试验后证明OpenCV完全可以取代ImageMagick++。下一步测试Qt和ZBar。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: