zoukankan      html  css  js  c++  java
  • 条形码,二维码 精确识别

    首先看看识别的效果:

    1.下载安装 ImageMagick  zBar

       

    2.新建头文件

     barcode.h

    #include <iostream>
    #include <string>
    
    //引入头文件
    #include ".Barincludezbar.h"
    #include ".ImageMagickincludeMagick++.h"
    
    
    using namespace std;
    using namespace zbar;
    
    
    //加载lib文件
    #pragma comment( lib, ".\ImageMagick\lib\CORE_RL_Magick++_.lib" )
    #pragma comment( lib, ".\ImageMagick\lib\CORE_RL_MagickCore_.lib" )
    #pragma comment( lib, ".\ImageMagick\lib\CORE_RL_MagickWand_.lib" )
    #pragma comment( lib, ".\ZBar\lib\libzbar-0.lib" )
    
    
    
    
    
    
    //解析 条码 二维码图片
    //失败返回0 成功返回非0  file 图片路径  tname条码类型   zdata条码
    static int getzbar(const char* file, string  &tname, string &zdata)
    {
    	int err = 0;
    #ifdef MAGICK_HOME
    	//    under Windows it is necessary to initialize the ImageMagick
    	//    library prior to using the Magick++ library
    	//    MAGICK_HOME = STR(C:Program Files(x86)ImageMagick - 6.9.1 - Q16)
    	Magick::InitializeMagick(MAGICK_HOME);
    #endif
    
    	// create a reader
    	ImageScanner scanner;
    
    	// configure the reader
    	scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);	
    
    	try
    	{
    		// obtain image data
    		Magick::Image magick(file);  // 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();
    
    		//wrap image data
    		Image image(width, height, "Y800", raw, 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)
    		{
    			tname = symbol->get_type_name();
    			zdata = symbol->get_data();
    			err++;
    		}
    		// clean up
    		image.set_data(NULL, 0);
    	}
    	catch (std::exception &ex)
    	{
    		std::cout << ex.what() << std::endl;
    		return -1;
    	}
    	return err;
    }
    
    #include <iostream>
    #include "Barcode.h"
    
    using namespace std;
    
    void main()
    {
    	string type, text;
    	if (getzbar("img\barcode.png", type, text))
    	{
    		cout << "类型:" << type << "序列号:" << text << endl;
    	}
    	else{
    		cout << "识别失败" << endl;
    	}
       if (getzbar("img\IMG_0146.JPG", s, b))     cout << "类型:" << s << "序列号:" << b << endl;
     
         if (getzbar("img\IMG_0226.JPG", s, b))     cout << "类型:" << s << "序列号:" << b << endl;

        if (getzbar("img\IMG_0227.JPG", s, b))     cout << "类型:" << s << "序列号:" << b << endl;

         if (getzbar("img\IMG_0228.JPG", s, b))     cout << "类型:" << s << "序列号:" << b << endl;

         if (getzbar("img\kkk.bmp", s, b))     cout << "类型:" << s << "序列号:" << b << endl;

         if (getzbar("img\liantu.png", s, b))     cout << "类型:" << s << "序列号:" << b << endl;

       system("pause"); }

    企鹅交流:0x7317AF28

  • 相关阅读:
    使用Jquery 来AJAX操作!
    血细胞形态异常的临床意义
    骨髓细胞检查
    保护眼睛的颜色
    php的一些技巧
    播放ASF文件无声音
    不被其他网站载入框架之内
    如何判断一个页面加载所耗费的时间
    教大家如何洗葡萄,很好吃哦!
    急性粒细胞白血病部分分化型AMLM2
  • 原文地址:https://www.cnblogs.com/xuandi/p/6612668.html
Copyright © 2011-2022 走看看