【机械视觉】Halcon—【十一、车牌检测和筛子检测】
【机械视觉】Halcon—【十一、车牌检测和筛子检测】
目录
【机械视觉】Halcon—【十一、车牌检测和筛子检测】
车牌检测
图片:
第一步:阈值分割+剪切车牌
第二步: 进行仿射变换
第三步: 阈值分割提取字符
第四步: 对车牌号进行拆分并按照顺序拼装
车牌检测完整代码
筛子检测
图片:
项目实例:
车牌检测
图片:
第一步:阈值分割+剪切车牌
*********阈值分割+剪切****************
threshold (GrayImage, Region, 76, 100)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 8000, 99999)
shape_trans (SelectedRegions, RegionTrans, 'rectangle2')
reduce_domain (GrayImage, RegionTrans, ImageReduced)
crop_domain (ImageReduced, ImagePart)
第二步: 进行仿射变换
**********仿射变换**********
area_center (Image, Area, Row, Column)
hom_mat2d_identity (HomMat2DIdentity)
hom_mat2d_rotate (HomMat2DIdentity, rad(-5), Row, Column, HomMat2DRotate)
hom_mat2d_slant (HomMat2DRotate,rad(15), 'x', Row, Column, HomMat2DSlant)
affine_trans_image (ImagePart, ImageAffineTrans, HomMat2DRotate, 'constant', 'false')
affine_trans_image (ImageAffineTrans, ImageAffineTrans1, HomMat2DSlant, 'constant', 'false')
第三步: 阈值分割提取字符
**********阈值分割************(将车牌上的字符提取出来)
threshold (ImageAffineTrans1, Region1, 172, 255)
opening_circle (Region1, RegionOpening, 1.5)
connection (RegionOpening, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 20, 99999)
第四步: 对车牌号进行拆分并按照顺序拼装
************对车牌号进行拆分************
select_obj (SelectedRegions1, N, 1)
select_obj (SelectedRegions1, i8,2)
select_obj (SelectedRegions1, i2,3)
select_obj (SelectedRegions1, E,4)
select_obj (SelectedRegions1, C,5)
select_obj (SelectedRegions1, i6,6)
select_obj (SelectedRegions1, su1,7)
select_obj (SelectedRegions1, su2,8)
select_obj (SelectedRegions1, su3,9)***********对车牌号进行拼装***********
gen_empty_obj (NumNames) // 创建一个空的对象NumNames
* 苏
union2 (su1, su2, RegionUnion)
union2 (RegionUnion, su3, Su)
* E
concat_obj (Su, E, NumNames)
*C
concat_obj (NumNames, C, NumNames)
*6
concat_obj (NumNames, i6, NumNames)
*2
concat_obj (NumNames, i2, NumNames)
*N
concat_obj (NumNames, N, NumNames)
*8
concat_obj (NumNames, i8, NumNames) // NumNames 就是组装好的图像,可根据索引对每一个字符进行查询dev_open_window (Row, Column, 512, 512, 'black', WindowHandle)
dev_display (NumNames)
车牌检测完整代码
dev_close_window ()
dev_update_off ()
read_image (Image, '1')
rgb1_to_gray (Image, GrayImage)*********阈值分割+剪切****************
threshold (GrayImage, Region, 76, 100)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 8000, 99999)
shape_trans (SelectedRegions, RegionTrans, 'rectangle2')
reduce_domain (GrayImage, RegionTrans, ImageReduced)
crop_domain (ImageReduced, ImagePart)**********仿射变换**********
area_center (Image, Area, Row, Column)
hom_mat2d_identity (HomMat2DIdentity)
hom_mat2d_rotate (HomMat2DIdentity, rad(-5), Row, Column, HomMat2DRotate)
hom_mat2d_slant (HomMat2DRotate,rad(15), 'x', Row, Column, HomMat2DSlant)
affine_trans_image (ImagePart, ImageAffineTrans, HomMat2DRotate, 'constant', 'false')
affine_trans_image (ImageAffineTrans, ImageAffineTrans1, HomMat2DSlant, 'constant', 'false')**********阈值分割************(将车牌上的字符提取出来)
threshold (ImageAffineTrans1, Region1, 172, 255)
opening_circle (Region1, RegionOpening, 1.5)
connection (RegionOpening, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 20, 99999)************对车牌号进行拆分************
select_obj (SelectedRegions1, N, 1)
select_obj (SelectedRegions1, i8,2)
select_obj (SelectedRegions1, i2,3)
select_obj (SelectedRegions1, E,4)
select_obj (SelectedRegions1, C,5)
select_obj (SelectedRegions1, i6,6)
select_obj (SelectedRegions1, su1,7)
select_obj (SelectedRegions1, su2,8)
select_obj (SelectedRegions1, su3,9)***********对车牌号进行拼装***********
gen_empty_obj (NumNames) // 创建一个空的对象NumNames
* 苏
union2 (su1, su2, RegionUnion)
union2 (RegionUnion, su3, Su)
* E
concat_obj (Su, E, NumNames)
*C
concat_obj (NumNames, C, NumNames)
*6
concat_obj (NumNames, i6, NumNames)
*2
concat_obj (NumNames, i2, NumNames)
*N
concat_obj (NumNames, N, NumNames)
*8
concat_obj (NumNames, i8, NumNames) // NumNames 就是组装好的图像,可根据索引对每一个字符进行查询dev_open_window (Row, Column, 512, 512, 'black', WindowHandle)
dev_display (NumNames)* tuple_regexp_select (numbers, '^[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云藏陕甘青宁新港澳台][A-HJ-NP-Z][A-Z0-9]{4,5}[A-Z0-9挂学警港澳]$', Selection1)
筛子检测
图片:
项目实例:
dev_close_window ()
dev_update_off ()
read_image (Image, '筛子')
threshold (Image, Region, 40, 160)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 600, 3000)
count_obj (SelectedRegions, Number)dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_display (SelectedRegions)
dev_disp_text ('筛子点数:'+Number, 'window', 'top', 'left', 'black', [], [])