C#怎么生成一个二维码扫描程序_C#如何调用摄像头识别【实战】

酷婷同学_1516

酷婷同学_1516

2026-03-14

1040人浏览

原创

Windows下C#调用摄像头实时预览并扫码最稳方案是Emgu CV+ZXing.Net:先枚举设备避免索引错误,用PictureBox/WriteableBitmap更新画面,预览帧中灰度处理后找四边形ROI再交ZXing解码,需注意分辨率、光照、DLL部署及版本匹配。

怎么用 C# 调起摄像头并实时预览画面

windows 平台下最轻量、兼容性最好的方式是用 videocapturedevice(来自 aforge.net)或更现代的 mediacapture(uwp/winui),但 winforms/wpf 项目里,emgu cv(opencv 的 .net 封装)实际落地最稳,尤其配合二维码识别时链路清晰。

常见错误现象:NullReferenceException 在调用 Start() 后立刻抛出;或者预览窗空白但没报错——大概率是设备索引错、分辨率不支持、或未正确绑定 ImageBox 控件的 Image 属性。

  • 先用 CameraDevice.GetDevices()(Emgu CV)或 MediaFrameSourceGroup.FindAllAsync()(UWP)枚举可用设备,别硬写索引 0
  • 预览帧回调里别直接在 UI 线程做图像处理,用 Invoke 或 Dispatcher.BeginInvoke 更新界面
  • WinForms 中推荐用 PictureBox + Bitmap 手动赋值,比 ImageBox 更可控;WPF 用 WriteableBitmap 配合 Lock/Unlock
  • 注意 MediaCapture 需要 webcam 权限声明(Package.appxmanifest),而 Emgu CV 不需要,但需分发 opencv_worldxxx.dll

怎么让 C# 程序实时扫描画面里的二维码

别用 ZXing.Net 的 BarcodeReader.Decode 对每一帧 Bitmap 直接扫——它没做帧间优化,CPU 占用高、延迟大、容易漏码。真正能跑得起来的组合是:Emgu CV 做 ROI 提取 + ZXing 做解码,且只在检测到疑似二维码区域时才触发解码。

使用场景:扫码枪替代、工控扫码、自助终端。不是“拍一张图识别”,而是“持续盯住画面找码”。

  • 每帧先用 CvInvoke.CvtColor 转灰度,再用 CvInvoke.Threshold 二值化,减少 ZXing 解码负担
  • 用 CvInvoke.FindContours 找四边形轮廓,筛选长宽比接近 1、面积足够、边缘闭合的区域,作为候选 ROI
  • ZXing 的 Decode 方法传入的是 Bitmap,但注意:它内部会转成灰度,所以提前二值化反而可能破坏结构——实测保留原始灰度图效果更好
  • 加个简单去重逻辑:连续 3 帧解出相同结果才上报,避免抖动误触发

为什么扫码总失败?重点检查这三处

80% 的“扫不出来”问题和算法无关,卡在环境或配置上。

常见错误现象:“明明有码,就是不识别”“偶尔识别但速度极慢”“扫码后内容乱码”。

C#
C#

"避开 C# 常见错误——空陷阱、异步陷阱、LINQ 陷阱及资源泄漏。"

下载
  • Camera 分辨率设太高(如 1920×1080),但二维码只占画面 1/10,ZXing 默认采样率不够——降为 640×480 或手动设置 options.TryHarder = true
  • 灯光太暗或反光强烈,导致二值化后模块断裂;别依赖自动曝光,用 CvInvoke.SetCaptureProperty 锁定 CAP_PROP_EXPOSURE 和 CAP_PROP_GAIN
  • 二维码本身质量差:打印模糊、贴纸褶皱、手机屏幕反光;ZXing 对 QR Code 的 ErrorCorrectionLevel 敏感,若生成时用了 M 级纠错,扫描端必须保持默认,不能强制设 L

WinForms/WPF 项目里引用哪些包才够用

Emgu CV 和 ZXing.Net 必须配对用,版本不匹配会导致 DllNotFoundException 或 BadImageFormatException。目前(2024)最省心的组合是:Emgu.CV.World 4.9.0.5501 + ZXing.Net 0.16.12,全部走 NuGet 安装,别混用 .NET Framework/.NET 6+ 的包。

性能影响:Emgu CV 4.9 默认带 OpenCV 4.9 运行时,x64 项目需在项目属性里勾选 Prefer 32-bit 关掉(否则加载失败);x64 下 DLL 路径必须和 bin/x64 对齐,不能丢在根目录。

  • 安装命令:Install-Package Emgu.CV.World -Version 4.9.0.5501,Install-Package ZXing.Net -Version 0.16.12
  • 若用 .NET 6+,确保目标框架是 net6.0-windows 或更高,且启用 UseWPF / UseWindowsForms
  • 发布时,opencv_videoio_ffmpegxxx_64.dll 必须随 exe 同目录,否则 VideoCapture 构造失败

最难调的其实是光照和焦距——算法再好,镜头离码 40cm 且光线斜射 30 度,照样扫不出。建议先用手机相机确认能否肉眼看清模块边界,再动手写代码。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c#

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1931

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

5424

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1869

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

33037

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3887

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3887

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1283

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

616

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

3023

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习