条形码,二维码 精确识别

首先看看识别的效果:

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

原文地址:https://www.cnblogs.com/xuandi/p/6612668.html