前言
随着人工智能和计算机视觉技术的不断发展,图像识别在智能交通、安防监控等领域中扮演着越来越重要的角色。车牌识别作为其中的一项关键技术,广泛应用于停车场管理、电子收费、交通执法等场景。
Halcon 是由 MVTec 公司推出的一款功能强大、性能优越的机器视觉软件开发平台,以其丰富的图像处理算法和高效的识别能力而广受开发青睐。
推荐一个基于 Halcon 开发一个简易但高效的车牌识别系统,通过图像预处理、区域提取与 OCR 字符识别等步骤,实现对图片中车牌信息的自动识别。
项目介绍
项目是一个基于 Halcon 的车牌识别系统,主要面向静态图片进行车牌区域定位和字符识别。通过手动调整阈值、面积筛选、形态学操作等方式,实现了从原始图像到最终车牌信息输出的完整流程。
项目特点如下:
-
不依赖深度学习模型,使用 Halcon 内置算子完成识别。
-
支持英文数字车牌识别(不含中文)。
-
可通过自定义模板扩展识别范围。
-
识别准确率高,适合嵌入式或轻量级应用场景。
项目功能
1、图像读取与显示
读取本地图像并显示在窗口中。
2、颜色空间转换
将 RGB 图像转换为 HSV 空间,以增强目标区域对比度。
3、图像增强
使用 emphasize 算子提升图像对比度,便于后续分割。
4、图像二值化
根据设定的阈值提取目标区域。
5、区域连接与闭合
对图像中的连通区域进行合并,并使用矩形闭运算保留车牌结构特征。
6、区域筛选
按照面积大小选择最大区域,并填充空洞。
7、抠图处理
提取车牌区域图像用于后续识别。
8、OCR 字符识别
使用 Halcon 自带的 MLP 分类器进行字符识别,输出识别结果。
项目技术
1、图像处理流程
| 步骤 | 功能描述 |
|---|---|
decompose3 | 将图像分解为 R、G、B 三个通道 |
trans_from_rgb | 转换为 HSV 颜色空间,便于分离颜色信息 |
emphasize | 提升图像对比度 |
threshold | 图像二值化处理 |
connection | 连接相邻区域 |
closing_rectangle1 | 形态学闭运算,去除小孔洞 |
select_shape_std | 按照面积选取最大区域 |
fill_up | 填充区域内部空洞 |
reduce_domain | 抠图提取感兴趣区域 |
2、OCR 字符识别
使用 Halcon 自带的 OCR 分类器 read_ocr_class_mlp 加载训练好的字体模板文件(如:Industrial_0-9A-Z_NoRej.omc)。
使用 do_ocr_multi_class_mlp 进行多字符识别。
输出识别结果:车牌号码。
项目特点
| 特点 | 描述 |
|---|---|
| 🚀 高效识别 | 整个流程运行速度快,适用于实时或批量识别场景 |
| 📦 轻量级 | 不依赖深度学习框架,资源占用低 |
| 🔍 高精度 | 识别准确率高达 90%,适用于大多数标准车牌 |
| 🧩 易于扩展 | 可通过添加自定义模板支持更多字符识别 |
| 📊 可视化强 | 所有图像处理步骤均可可视化调试,便于分析优化 |
项目代码
dev_close_window()
dev_clear_window()
read_image(image,'C:/Users/Administrator/Desktop/halcon/chepai4.jpg')
get_image_size(image, Width, Height)
dev_open_window_fit_size (0, 0, Width, Height, -1, -1, WindowHandle)
dev_display(image)
* 将图片转化为rgb三通道
decompose3(image, r, g, b)
* 转为hsv 色调 饱和度 明度值
trans_from_rgb(r, g, b, h, s, v, 'hsv')
* 提升图片对比度
emphasize(s, ImageEmphasize, Width, Height, 1)
threshold(ImageEmphasize, Region, 255, 255)
connection(Region, ConnectedRegions)
closing_rectangle1(ConnectedRegions, RegionClosing, 50, 50)
* 按照最大面积选
select_shape_std(RegionClosing, SelectedRegions, 'max_area', 70)
* 填充选出区域的孔洞
fill_up(SelectedRegions, RegionFillUp)
* 抠图
reduce_domain(ImageEmphasize, RegionFillUp, ImageReduced)
* 抠出原图
reduce_domain(image, RegionFillUp, ImageReduced1)
* 识别
threshold(ImageReduced, Region1, 0, 100)
* 打断连接区域
connection(Region1, ConnectedRegions1)
* 筛选显示区域
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 4014, 19840.76)
* 排序区域
sort_region(SelectedRegions1, SortedRegions, 'character', 'true', 'row')
* 反转图片
invert_image(ImageReduced1, ImageInvert)
* 开始识别
read_ocr_class_mlp('Industrial_0-9A-Z_NoRej.omc', OCRHandle)
do_ocr_multi_class_mlp(SortedRegions, ImageInvert, OCRHandle, Class, Confidence)
项目效果
总结
本文介绍了一个基于 Halcon 实现的车牌识别系统,涵盖了图像预处理、区域提取、字符识别等关键步骤。整个项目无需依赖深度学习模型,利用 Halcon 强大的图像处理函数库即可完成高效识别,具有良好的实用性和可移植性。
虽然目前该项目不支持中文识别,但通过训练新的 OCR 模板,可以轻松扩展支持更多字符类型。
以上仅展示了机器视觉的车牌识别的部分功能。更多实用特性和详细信息,请大家访问项目源码。
希望通过本文能为 Halcon 机器视觉开发方面提供有价值的参考。感谢您阅读本篇文章,欢迎在评论区留言交流,分享您的宝贵经验和建议。
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!
优秀是一种习惯,欢迎大家留言学习!