bash
dev_close_window()
**读取图片
bash
read_image (Car2025, 'D:/ltg/Pictures/Images/car/CarSample.png')
dev_open_window(0, 0, -1, -1, 'black', WindowHandle)
dev_display(Car2025)
**转灰度图
bash
rgb1_to_gray(Car2025, GrayImage)
**二值化处理(可用灰度直方图筛选)
bash
threshold (GrayImage, Regions, 7, 99)
**连通(阻断分区域)打断
bash
connection(Regions, ConnectedRegions)
**形态学处理 相关算子[本例图像清晰未用到]
*操作 HALCON算子 典型作用 常使用场景
*-----------------------------------------------------------------------
*膨胀 dilation_circle 扩大区域,连接断裂部分 连接分散目标、裂缝填补、目标区域扩展
*腐蚀 erosion_circle 消除噪声,分离目标区域 背景噪声去除、目标分离、形态边界缩小
*开运算 opening_circle 去除噪声,平滑边界 去除细小杂质、优化形状、改善识别结果
*闭运算 closing_circle 填充孔洞,平滑边界 修复孔洞、封闭边界、填补不规则缺陷
**可用特征直方图筛选目标区域(以面积为主[配合特征检测工具])
bash
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 15000, 18000)
***处理图片-转正图片
**生成一个仿射矩阵
bash
shape_trans(SelectedRegions, RegionTrans, 'rectangle2')
**得到仿射矩阵的中心点坐标
bash
area_center(RegionTrans, Area, Row, Column)
**得到仿射矩阵的斜率Phi
bash
orientation_region(RegionTrans, Phi)
**判断斜率Phi正负,扶正图形
bash
if (Phi>=0)
Angle:=0
else
Angle:=180
endif
**生成一个仿射矩阵
bash
vector_angle_to_rigid(Row, Column, Phi, Row, Column, rad(Angle), HomMat2D)
**若车牌图片文字倾斜,则可以纠正(将 "Phi" 参数更改为角度参数 "rad(?)")
bash
hom_mat2d_slant(HomMat2D, Phi, 'x', Column, Row, HomMat2DSlant)
**仿射矩阵转正(ROI区域)
bash
affine_trans_region(RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
**对原图进行转正
bash
affine_trans_image(Car2025, ImageAffineTrans, HomMat2D, 'constant', 'false')
**车牌区域扣图
bash
reduce_domain(ImageAffineTrans, RegionAffineTrans, ImageReduced)
****开始识别车牌
**灰度化
bash
rgb1_to_gray(ImageReduced, GrayImage1)
**反转图像,由'黑底白字'图像转为'白底黑字'图像[重要,字符识别依据]
bash
invert_image(GrayImage1, ImageInvert)
**二值化[作用:生成红色目标区域]
bash
threshold (GrayImage1, Regions1, 114, 188)
**开运算,去掉外框
bash
opening_rectangle1(Regions1, RegionOpening, 3, 5)
**打断/分割整张图形为单个区域
bash
connection(RegionOpening, ConnectedRegions1)
**选择ROI区域(多依面积为主,设置在每个字符占的面积最小区域和最大区域为一区间)
bash
select_shape(ConnectedRegions1, SelectedRegions1, 'area', 'and', 600, 800)
**对ROI区域按列排序
bash
sort_region(SelectedRegions1, SortedRegions, 'character', 'true', 'column')
**读取训练好的字符库
bash
read_ocr_class_mlp('D:/Program Files/MVTec/HALCON-22.11-Steady/ocr/CNLicense_Plate_mlp.omc', OCRHandle)
**按字符库对比识别"对应/归类"相应字符,形成字符串数组Class
bash
do_ocr_multi_class_mlp(SortedRegions, ImageInvert, OCRHandle, Class, Confidence)
***显示对应字符到屏幕上
bash
dev_display(ImageAffineTrans)
**设置显示字体
bash
set_display_font(WindowHandle, 30, 'mono', 'true', 'false')
**统计显示的字符数
bash
count_obj(SortedRegions, Number)
**依次显示读取的字符
bash
for Index:=1 to Number by 1
select_obj(SortedRegions, ObjectSelected, Index)
area_center(ObjectSelected,Area1, Row1, Column1)
dev_disp_text(Class[Index-1],'window', Row1, Column1, 'black', [], [])
endfor
write_string(WindowHandle, Class)
disp_message(WindowHandle, Class, 'image', Row1, Column1, 'blue', 'true')