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。

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