在C#中使用ZBar识别条形码
目录:
一.识别库
二.从一张图片中提取多个条形码
三.注意事项
一.识别库
目前主流的识别库主要有ZXing.NET和ZBar,这里我使用的是ZBar,ZXing.NET也试过,同等条件下,识别率不高。
ZBar相关类库包括:libzbar.dll,libzbar-cil.dll,libiconv-2.dll;很奇怪为什么不能直接引用libzbar.dll,实际使用时引用的是libzbar-cil.dll,libiconv-2.dll是libzbar-cil.dll用来映射libzbar.dll的。ZBar识别库包含在源码中,文末可直接下载。
二.从一张图片中提取多个条形码
先上截图:
需要提取条形码的图片:
识别结果
主要代码:
/// <summary>/// 条码识别/// </summary>private void ScanBarCode(string fileName){DateTime now = DateTime.Now;Image primaryImage = Image.FromFile(fileName);Bitmap pImg = MakeGrayscale3((Bitmap)primaryImage);using (ZBar.ImageScanner scanner = new ZBar.ImageScanner()){scanner.SetConfiguration(ZBar.SymbolType.None, ZBar.Config.Enable, 0);scanner.SetConfiguration(ZBar.SymbolType.CODE39, ZBar.Config.Enable, 1);scanner.SetConfiguration(ZBar.SymbolType.CODE128, ZBar.Config.Enable, 1);List<ZBar.Symbol> symbols = new List<ZBar.Symbol>();symbols = scanner.Scan((Image)pImg);if (symbols != null && symbols.Count > 0){string result = string.Empty;symbols.ForEach(s => result += "条码内容:" + s.Data + " 条码质量:" + s.Quality + Environment.NewLine);MessageBox.Show(result);}}}/// <summary>/// 处理图片灰度/// </summary>/// <param name="original"></param>/// <returns></returns>public static Bitmap MakeGrayscale3(Bitmap original){//create a blank bitmap the same size as originalBitmap newBitmap = new Bitmap(original.Width, original.Height);//get a graphics object from the new imageGraphics g = Graphics.FromImage(newBitmap);//create the grayscale ColorMatrixSystem.Drawing.Imaging.ColorMatrix colorMatrix = new System.Drawing.Imaging.ColorMatrix(new float[][]{new float[] {.3f, .3f, .3f, 0, 0},new float[] {.59f, .59f, .59f, 0, 0},new float[] {.11f, .11f, .11f, 0, 0},new float[] {0, 0, 0, 1, 0},new float[] {0, 0, 0, 0, 1}});//create some image attributesImageAttributes attributes = new ImageAttributes();//set the color matrix attributeattributes.SetColorMatrix(colorMatrix);//draw the original image on the new image//using the grayscale color matrixg.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height),0, 0, original.Width, original.Height, GraphicsUnit.Pixel, attributes);//dispose the Graphics objectg.Dispose();return newBitmap;}
三.注意事项
如果条码识别率不高,考虑是图片的DPI不够。我的项目初期使用的是500万像素的高拍仪,拍出来的图片识别率始终不高,DPI为96。后来更换为800万像素的高拍仪,DPI为120,识别率从60%直接上升到95%+。当然,也需要对图片做一些裁剪。另外,灰度处理是必须的,可减少拍摄照片时反光引起的识别率不高问题。
在C#中使用ZBar识别条形码相关推荐
- Opencv+ZBar识别条形码、二维码
文章目录 Opencv识别条形码.二维码 1.ZBar环境配置 2.一维码(条形码)识别 3. 二维码的识别 4. Opencv识别二维码 结束 Opencv识别条形码.二维码 最近的一次作业,恰好之 ...
- c语言编程图片识别条形码,基于Zbar的条形码图像识别算法的制作方法
本发明涉及条形码识别技术领域,特别是涉及一种基于Zbar的条形码图像识别算法. 背景技术: 条形码是将宽度不等的多个黑条和空白,按一定的编码规则排列,用以表达一组信息的图形标识符.随着科技的迅速发展, ...
- 基于opencv3.0和zbar下条形码和二维码的识别与解码
其中对条码与二维码的识别分为以下4个步骤 1. 利用opencv和Zbar(或者Zxing)对标准的条形码图片(即没有多余背景干扰,且图片没有倾斜)进行解码,将解码信息显示出来,并与原始信息对比. 2 ...
- winform中实现打开摄像头+识别条形码和二维码
我们去菜鸟驿站拿快递的时候,需要我们把自己的快递拿到扫描台上扫下,表示包裹已出库.今天我们就来实现这个功能,基于winform程序开发快递单的扫描和识别,顺便也识别下二维码.用到的组件有2个,分别是A ...
- Python实现条码识别:从图像中自动检测和识别条形码
Python实现条码识别:从图像中自动检测和识别条形码 在现代零售业中,条形码是一项必不可少的技术.它们提供了一种快速.准确和可靠的方法来追踪和管理库存.随着计算机视觉技术的发展,我们可以利用Pyth ...
- 使用zbar识别二维码
目录 1 说明 2 软件获取 3 在Windows下使用zbar 4 在Linux PC(Ubuntu Server 1604 64位)下使用zbar 4.1 无内存泄漏的示例代码 5 在ARM Li ...
- 配置zbar识别二维码(转载)
原文地址: http://blog.csdn.net/dcrmg/article/details/52108258 二维码解码器Zbar+VS2012开发环境配置 Zbar条码解码器是一个开源的二 ...
- Java 扫描识别条形码图片
1.条形码扫描识别的实现方法及步骤 本文以Java代码示例介绍如何来扫描和识别条形码图片.这里使用免费的条码工具Free Spire.Barcode for Java,调用BarcodeScanner ...
- java条码识别技术_Java 生成、识别条形码
条形码是由一定的字符,数字及符号组成,用以表达一组信息的图形标识符.它可以标出物品的商品名称.生产日期.图书分类号,邮件起止地点等.因而在商品流通.图书管理.邮政管理等许多领域得以广泛的应用.本文将通 ...
最新文章
- UVA - 11584 Partitioning by Palindromes(划分成回文串)(dp)
- linux io重定向指令,Linux基础知识之 IO重定向
- Python学习系列(一)(基础入门)
- core webapi缩略图_netcore 图片缩略图
- oracle dba开头的表,KU$开头的表是什么表?
- go json数据出现unicode_Golang处理JSON(一) 序列化
- (万里开源)greatdb mysql 8.0以上版本创建用户并授权远程连接
- CSS背景图像的简单响应
- 北京54坐标系和1980西安坐标系转换
- 几种搜索引擎算法 SEO
- 摄像头M-JPEG 格式分析
- 解题:NOI 2010 航空管制
- java程序员怎么创建自己的网站:第一章:总体流程,我崩溃了
- 第十章:Archiving
- php GD库的使用
- MySql 数据库 管理员密码忘记怎么办?
- 2013款Mac Pro“神秘”主机详解
- 算法点滴yan测试+打印
- 程序员不愁没练手的小项目
- #私藏项目实操分享#Python爬虫实战,requests+xpath模块,Python实现爬取豆瓣影评