跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

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

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知道 CSDN推出的一款AI技术问答工具 下载
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 度,照样扫不出。建议先用手机相机确认能否肉眼看清模块边界,再动手写代码。

相关文章