当前位置: 首页 > java >正文

.NET WinForm图像识别二维码/条形码并读取其中内容

需求:图像识别出一张图片中的二维码或者条形码,并读取其中内容。

一、安装库(特别注意,网上很多都没说清楚)

如果是基于.net framework,则安装ZXing.Net(建议0.14.0版本左右,具体看实际,版本太高,部分接口发生变化)
如果是基于.Net Standard 2.0 or .NET CORE 3.0/3.1 or .NET 5.0 or higher,则安装ZXing.Net.Bindings.Windows.Compatibility

二、WinForm示例代码(含关键优化)

using ZXing.Common;
using ZXing;
using ZXing.Windows.Compatibilitypublic partial class MainForm : Form
{public MainForm(){InitializeComponent();}// 选择图片按钮点击事件private void btnSelectImage_Click(object sender, EventArgs e){OpenFileDialog dialog = new OpenFileDialog();dialog.Filter = "图片文件|*.jpg;*.png;*.bmp";if (dialog.ShowDialog() == DialogResult.OK){pictureBox1.Image = Image.FromFile(dialog.FileName);}}// 识别条码按钮点击事件private void btnDecode_Click(object sender, EventArgs e){if (pictureBox1.Image == null){MessageBox.Show("请先选择图片");return;}var bitmap = new Bitmap(pictureBox1.Image);// 创建解码器(关键配置)var reader = new BarcodeReader{Options = new DecodingOptions{PossibleFormats = new[] { BarcodeFormat.QR_CODE, BarcodeFormat.CODE_128,  // 条形码BarcodeFormat.EAN_13 },TryHarder = true,      // 提高复杂图像识别率CharacterSet = "UTF-8" // 支持中文}};// 识别条码(支持多码)Result[] results = reader.DecodeMultiple(bitmap);if (results != null){foreach (Result result in results){txtResult.AppendText($"✅ 识别成功!类型:{result.BarcodeFormat},内容:{result.Text}\r\n");}}else{txtResult.Text = "❌ 识别失败:未检测到有效条码";}}
}

在这里插入图片描述

三、识别率优化技巧

//1. 图像预处理(解决模糊/低对比度问题)
csharp
// 转换为灰度图+二值化
var luminanceSource = new BitmapLuminanceSource(bitmap);
var binarizer = new HybridBinarizer(luminanceSource);
var binBitmap = new BinaryBitmap(binarizer);Result result = reader.Decode(binBitmap); // 使用处理后的图像
//2. 多尺度识别(针对小尺寸条码)
csharp
for (double scale = 1.0; scale <= 2.0; scale += 0.2)
{var scaledBitmap = new Bitmap(bitmap, new Size((int)(bitmap.Width * scale), (int)(bitmap.Height * scale)));Result result = reader.Decode(scaledBitmap);if (result != null) break;
}
//3. 区域裁剪(复杂背景中定位条码)
csharp
// 假设已知条码在图像右下角1/4区域
Rectangle cropArea = new Rectangle(bitmap.Width / 2, bitmap.Height / 2, bitmap.Width / 2, bitmap.Height / 2
);using (Bitmap cropped = bitmap.Clone(cropArea, bitmap.PixelFormat))
{Result result = reader.Decode(cropped);
}

四、常见问题解决

在这里插入图片描述

在这里插入图片描述

http://www.xdnf.cn/news/9847.html

相关文章:

  • 01.认识Kubernetes
  • 广告流量监测和IP地址离线库
  • Nexus仓库数据高可用备份与恢复方案(下)
  • 苹果FINDMY和谷歌FIND HUB增强共享位置功能
  • offset 家族和 client 家族
  • 【第4章 图像与视频】4.1 图像的绘制
  • Next.js 布局(Layout)与模板(Template)深度解析:从原理到实战
  • 在VirtualBox中打造高效开发环境:CentOS虚拟机安装与优化指南
  • SQL正则表达式总结
  • Java面试实战:从Spring到大数据的全栈挑战
  • STM32中,如何理解看门狗
  • WebSocket与实时对话式AI服务的集成
  • MySQL ALTER TABLE 组合操作时导致的错误
  • GPU 图形计算综述 (二):固定管线
  • dto vo类为什么要序列化?
  • 相量法正弦稳态电路的分析(面向题目)
  • 从汇编的角度揭秘C++函数重载,原来这么简单
  • 【最小生成树】Prim 算法、Kruskal 算法
  • 基于vue框架的独居老人上门护理小程序的设计r322q(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 42道CSS高频题整理(附答案背诵版)
  • Java AQS(Abstract Queued Synchronized)深度解析
  • MyBatisPlus(2):常用注解
  • 【MATLAB例程】基于脉冲雷达的TDOA目标定位,适用于四个锚点、三维空间的环境,附代码下载链接
  • 亚远景-ASPICE与ISO 26262:适用范围与应用场景的差异分析
  • 国产化redis 替代产品tendis 安装
  • 1Panel v2 首发体验(alpha)
  • Ubuntu 24.04 LTS Chrome 中文输入法(搜狗等)失效?一行命令解决
  • 项目管理进阶:精读78页 IPD+CMMI+Scrum一体化研发管理解决方案【附全文阅读】
  • 初学python的我开始Leetcode题10-1
  • 递归与递推算法详解(C++版)教案——以斐波那契数列为例