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

安装完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

OpenCV环境配置1
OpenCV环境配置2
OpenCV环境配置3
OpenCV环境配置4

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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章