halcon实现车牌识别
通过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实现车牌识别相关推荐
- halcon机器视觉之玩转车牌识别-超人视觉罗超
本人超人视觉-罗超: 大家好,直接上干货.本人将从哲学和技术结合的全新视角来理解,我的整个学习视觉的思想套路都是从哲学世界观来展示,下面我将逐步从我的第一篇博客开始给大家展示.首先我们要对一 ...
- halcon机器视觉玩转车牌识别-超人视觉罗超
本人超人视觉-罗超: 大家好,直接上干货.本人将从哲学和技术结合的全新视角来理解,我的整个学习视觉的思想套路都是从哲学世界观来展示,下面我将逐步从我的第一篇博客开始给大家展示.首先我们要对一个机器视觉 ...
- 【愚公系列】2023年04月 Halcon机器视觉-基于Halcon车牌识别
文章目录 前言 1.Halcon是什么 2.车牌识别 3.车牌识别系统 一.基于Halcon车牌识别 1.车牌识别的流程 二.车牌识别前预处理 三.开始车牌识别 四.识别车牌上面的中文 1.处理需要识 ...
- 学习Halcon之简单车牌识别
最近由于要接触halcon就开始学习halcon课程,看得是超人视觉得视频,今天学了车牌识别,觉得使用halcon确实很方便,学习的思路也很重要,所以花点时间记一记. 首先,获取一张含有车牌的图片后将 ...
- Halcon学习笔记(五)几何定位+仿射+车牌识别
定位 Blob分析 模板匹配 仿射 使用单位矩阵求仿射矩阵 示例:affine_trans_region.hdev 单位矩阵 hom_mat2d_identity (HomMat2DIdentity) ...
- 浅谈计算机视觉HALCON视觉库识别车牌号
如图,使用HALCON视觉库识别车牌号,代码如下: dev_close_window () read_image (Image, 'Q:/车牌.jpg') get_image_size (Image, ...
- robo3t 连接服务器数据库_车牌识别软件连接各种数据库方法大全
软件连接各种数据库方法大全 1:软件连接免安装数据库. 免安装数据库使用方便,不受操作系统版本影响,不用安装,解压打开运行即可,所以免安装数据库不要放在桌面上,也不要解压打开多个. 打开车牌识别软件, ...
- LabVIEW OCR 实现车牌识别(实战篇—3)
目录 1.字符数据集训练 2.识别与验证 在学习本章之前,推荐先学习系列专栏文章:LabVIEW目标对象分类识别(理论篇-5) OCR(光学字符识别)是指机器自动从图像中识别文本字符的过程,OCR机器 ...
- OpenCV(项目)车牌识别4 -- 总结篇
目录 一.效果 1.成功案例 2.经典失败案例(单字符识别成类似字符) 3.其他失败案例 二.总结 三.车牌识别总代码 一.效果 1.成功案例 2.经典失败案例(单字符识别成类似字符) 3.其他失败案 ...
最新文章
- PDD面试题:new一个对象的过程中发生了什么?
- blocked java线程_Java线程状态:BLOCKED与WAITING的区别
- asp使用mysql5.0_ASP使用MYSQL数据库全攻略
- cineware 和ae什么关系
- ActiveMQ:了解内存使用情况
- Django-C001-快速入门
- AI助手智商测评Siri进步最大,无人驾驶打车服务已在美国试行
- dijkstra算法_最短路径问题——迪杰斯特拉算法(Dijkstra)
- 《scikit-learn》SVM(一)
- Windows操作系统远程Linux服务器传输文件方法(以EasyDSS云平台、EasyNVR上传部署为例)...
- Linux 内核修复5个高危漏洞
- mysql -e -f_twitter-不正确的字符串值:'\ xF0 \ x9F \ x8E \ xB6 \ xF0 \ x9F ...'MySQL
- Linux系统禁止IP登录
- 《与孩子一起学编程》书评
- vs2012 有效产品密钥
- unity开发下的C#学习笔记——第四章:鼠标匀速跟随
- nginx源码准备 - Linux C++网络编程(五)
- 通信系统仿真原理与无线应用笔记-MATLAB
- c# .net object对象与json字符串互转换
- 国际版链克口袋 获取方法
热门文章
- GoogLeNet论文详解
- 有线网络无法识别的解决办法
- 对 c\c++ char类型的理解
- Odoo丨如何在Odoo中修改HTML编辑工具栏?
- element-plus的el-icon和@element-plus/icons vue3 组件封装与使用
- vue+uni-app商城实战 | 第一篇:从0到1快捷开发一个商城微信小程序,无缝接入OAuth2实现一键授权登录
- python.txt文件的写入和追加
- JS判断身份证(15位18位)的合法性
- 用python比较大小_用python比较大小
- 矩阵链乘法问题 (算法)