通过halcon实现车牌识别,大致分为读取图像、车牌定位、角度修正、分割、识别显示几部分。

一、读取照片
打开halcon,在菜单栏文件选型中读取图像,或者直接写read_image算子导入图像。

二、定位车牌
1.颜色空间转换
利用decompose3算子和trans_from_rgb算子,将图像转为hsv颜色空间图像,选取车牌部分最明显的一张。此例子中选择的是ImageResualt2,

2.阈值分割
通过阈值分割大致选出包含车牌区域。

用connection算子将图像分割成不同的连通域。

通过形态学方法,特征选择等进一步确定车牌所在位置。
在特征选择时,首选通过面积(area)来定位车牌,如果通过面积不能确定,可以增加宽度,长度等特征进行筛选。另外在特征直方图中,每一个峰值即代表一个特征区域。

如果选出的车牌区域不是一个完整的连通域,而是几个相邻的连通域,可以使用union算子将他们连成一个连通域进行定位。

将连通域用算子shape_trans转换成一个矩形区域。

该区域即是车牌所在区域。
三、角度修正
由于识别字符采用的是halcon内部的训练集,所以需要将倾斜的字符转正。
首先通过orientation_region算子获得该矩形区域的倾斜角度,然后将图像修正。
对矩形区域的旋转要先找到矩形的中心,然后通过算子vector_angle_to_rigid构建仿射变换模板,其算子使用方法为

vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D)

参数描述

我们需要注意的参数是angle1和angle2,angle1是输入图像的角度,angle2是输出图像的角度,为了方便我们的理解和运算,我们输入的角度设置为phi(上一步求得),如果phi为正数角度转为rad(180),如果phi为负数角度转为rad(0).
而phi的正负是由于参考坐标的不同而引起的,在此我们不进行深入理解。
然后使用生成的模型,用算子将原图像和矩形区域都进行仿射变换。


四、分割
使用reduce_domain算子对图像进行分割,将车牌分离出来。

然后对图像进行转灰度图。

阈值分割

连通域分割

多种特征联合选择,一般使用面积,宽度,高度



对区域进行排序,按照character进行排序
五、识别显示
利用算子read_ocr_class_mlp选择ocr模型,Industrial_0-9A-Z_NoRej.omc
利用算子do_ocr_multi_class_mlp进行识别
显示结果

以下为代码

*读入图像
read_image (Chepai, '/chepai1.jpg')
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)*定位
decompose3 (Chepai, Image1, Image2, Image3)
trans_from_rgb (Image1, Image2, Image3, ImageResult1, ImageResult2, ImageResult3, 'hsv')
threshold (ImageResult2, Regions, 85, 255)
opening_rectangle1 (Regions, RegionOpening, 3, 3)
fill_up (RegionOpening, RegionFillUp)
connection (RegionFillUp, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions2, 'area', 'and', 7546.3, 10000)union1 (SelectedRegions2, RegionUnion)
shape_trans (RegionUnion, RegionTrans, 'rectangle2')*角度修正
orientation_region (RegionTrans, Phi)
area_center (RegionTrans, Area, Row, Column)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(180), HomMat2D)
affine_trans_image (Chepai, ImageAffineTrans, HomMat2D, 'constant', 'false')
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor')*分割
reduce_domain (ImageAffineTrans, RegionAffineTrans, ImageReduced)
rgb1_to_gray (ImageReduced, GrayImage)
threshold (GrayImage, Regions1, 193, 249)
connection (Regions1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions, ['area','column','column2'], 'and', [20.83,243.06,125.46], [434.72,500,500])sort_region (SelectedRegions, SortedRegions, 'character', 'true', 'column')
invert_image (GrayImage, ImageInvert)*识别
read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej.omc', OCRHandle)
do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle, Class, Confidence)
disp_message (WindowHandle, Class, 'window', 0, 0, 'blue', 'true')

halcon实现车牌识别相关推荐

  1. halcon机器视觉之玩转车牌识别-超人视觉罗超

         本人超人视觉-罗超: 大家好,直接上干货.本人将从哲学和技术结合的全新视角来理解,我的整个学习视觉的思想套路都是从哲学世界观来展示,下面我将逐步从我的第一篇博客开始给大家展示.首先我们要对一 ...

  2. halcon机器视觉玩转车牌识别-超人视觉罗超

    本人超人视觉-罗超: 大家好,直接上干货.本人将从哲学和技术结合的全新视角来理解,我的整个学习视觉的思想套路都是从哲学世界观来展示,下面我将逐步从我的第一篇博客开始给大家展示.首先我们要对一个机器视觉 ...

  3. 【愚公系列】2023年04月 Halcon机器视觉-基于Halcon车牌识别

    文章目录 前言 1.Halcon是什么 2.车牌识别 3.车牌识别系统 一.基于Halcon车牌识别 1.车牌识别的流程 二.车牌识别前预处理 三.开始车牌识别 四.识别车牌上面的中文 1.处理需要识 ...

  4. 学习Halcon之简单车牌识别

    最近由于要接触halcon就开始学习halcon课程,看得是超人视觉得视频,今天学了车牌识别,觉得使用halcon确实很方便,学习的思路也很重要,所以花点时间记一记. 首先,获取一张含有车牌的图片后将 ...

  5. Halcon学习笔记(五)几何定位+仿射+车牌识别

    定位 Blob分析 模板匹配 仿射 使用单位矩阵求仿射矩阵 示例:affine_trans_region.hdev 单位矩阵 hom_mat2d_identity (HomMat2DIdentity) ...

  6. 浅谈计算机视觉HALCON视觉库识别车牌号

    如图,使用HALCON视觉库识别车牌号,代码如下: dev_close_window () read_image (Image, 'Q:/车牌.jpg') get_image_size (Image, ...

  7. robo3t 连接服务器数据库_车牌识别软件连接各种数据库方法大全

    软件连接各种数据库方法大全 1:软件连接免安装数据库. 免安装数据库使用方便,不受操作系统版本影响,不用安装,解压打开运行即可,所以免安装数据库不要放在桌面上,也不要解压打开多个. 打开车牌识别软件, ...

  8. LabVIEW OCR 实现车牌识别(实战篇—3)

    目录 1.字符数据集训练 2.识别与验证 在学习本章之前,推荐先学习系列专栏文章:LabVIEW目标对象分类识别(理论篇-5) OCR(光学字符识别)是指机器自动从图像中识别文本字符的过程,OCR机器 ...

  9. OpenCV(项目)车牌识别4 -- 总结篇

    目录 一.效果 1.成功案例 2.经典失败案例(单字符识别成类似字符) 3.其他失败案例 二.总结 三.车牌识别总代码 一.效果 1.成功案例 2.经典失败案例(单字符识别成类似字符) 3.其他失败案 ...

最新文章

  1. PDD面试题:new一个对象的过程中发生了什么?
  2. blocked java线程_Java线程状态:BLOCKED与WAITING的区别
  3. asp使用mysql5.0_ASP使用MYSQL数据库全攻略
  4. cineware 和ae什么关系
  5. ActiveMQ:了解内存使用情况
  6. Django-C001-快速入门
  7. AI助手智商测评Siri进步最大,无人驾驶打车服务已在美国试行
  8. dijkstra算法_最短路径问题——迪杰斯特拉算法(Dijkstra)
  9. 《scikit-learn》SVM(一)
  10. Windows操作系统远程Linux服务器传输文件方法(以EasyDSS云平台、EasyNVR上传部署为例)...
  11. Linux 内核修复5个高危漏洞
  12. mysql -e -f_twitter-不正确的字符串值:'\ xF0 \ x9F \ x8E \ xB6 \ xF0 \ x9F ...'MySQL
  13. Linux系统禁止IP登录
  14. 《与孩子一起学编程》书评
  15. vs2012 有效产品密钥
  16. unity开发下的C#学习笔记——第四章:鼠标匀速跟随
  17. nginx源码准备 - Linux C++网络编程(五)
  18. 通信系统仿真原理与无线应用笔记-MATLAB
  19. c# .net object对象与json字符串互转换
  20. 国际版链克口袋 获取方法

热门文章

  1. GoogLeNet论文详解
  2. 有线网络无法识别的解决办法
  3. 对 c\c++ char类型的理解
  4. Odoo丨如何在Odoo中修改HTML编辑工具栏?
  5. element-plus的el-icon和@element-plus/icons vue3 组件封装与使用
  6. vue+uni-app商城实战 | 第一篇:从0到1快捷开发一个商城微信小程序,无缝接入OAuth2实现一键授权登录
  7. python.txt文件的写入和追加
  8. JS判断身份证(15位18位)的合法性
  9. 用python比较大小_用python比较大小
  10. 矩阵链乘法问题 (算法)