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

.NET WinForm图像识别二维码/条形码

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

一、安装ZXing.NET(此处建议使用0.14.0,高版本的不少地方进行优化,如果能处理好也可)

Install-Package ZXing.Net

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

using System;
using System.Drawing;
using System.Windows.Forms;
using ZXing;public 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/9881.html

相关文章:

  • 从零开始的数据结构教程(六) 贪心算法
  • 超声波换能器 换能原理
  • 「卫星百科」“绿色守卫”高分六号
  • MVCC 原理与并发控制实现
  • 【Pandas】pandas DataFrame equals
  • STP配置
  • 基于Java,SpringBoot,Vue,UniAPP医院预约挂号买药就诊病例微信小程序系统设计
  • 代码随想录打卡|Day50 图论(拓扑排序精讲 、dijkstra(朴素版)精讲 )
  • Java中如何枚举正则表达式捕获组的名字
  • RabbitMQ项目实战
  • 【机器学习基础】机器学习入门核心算法:随机森林(Random Forest)
  • 华为OD机试真题——AI面板识别(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 高效开发,升级软件,硬件也要专业
  • 大数据治理体系构建与实践路径
  • MYSQL 使用心得
  • SIEMENS西门子6FC特价系列型号6FC5303-1AF02-8BP0
  • AI问答-Vue3+TS:reactive创建一个响应式数组,用一个新的数组对象来替换它,同时保持响应性
  • Java中的设计模式实战:单例、工厂、策略模式的最佳实践
  • NumPy 2.x 完全指南【二十二】数组标量
  • Socket网络编程
  • Vue3 + Element Plus 实现树形结构的“单选 + 只选叶子节点 + 默认选中第一个子节点”
  • 微内核与宏内核有什么区别(GAI)
  • laya3的2d相机与2d区域
  • 2025.05.28-华为暑期实习第二题-200分
  • 尝鲜纯血鸿蒙,华为国际版本暂时不支持升级。如mateX6 国际版?为什么不支持?什么时候支持?
  • spark shuffle的分区支持动态调整,而hive不支持
  • Oracle MOVE ONLINE 实现原理
  • Java求职者面试题详解:计算机网络、操作系统、设计模式与数据结构
  • VR 电缆故障测试系统:技术革新​
  • 数控技术应用理实一体化平台VR实训系统