车牌定位
dev_close_window()
dev_open_window(0,0,512,400,'black',WindowHandle)
list_image_files('C:/Users/Augustine/Desktop/车牌照图片','jpg',[],ImageFiles)
for i:=0 to |ImageFiles|-1 by 1
read_image(Image, ImageFiles[i])
*获取三色通道
decompose3(Image, r, g, b)
*将三色通道处理为hsv
trans_from_rgb(r,g,b,h,s,v,'hsv')
*按照s方式阈值处理
threshold (s, Regions, 177, 251)
*膨胀运算
dilation_rectangle1(Regions, RegionDilation, 1, 3)
connection(RegionDilation, ConnectedRegions)
*选择特征
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 6639.49, 9284.42)
*闭运算,先膨胀在腐蚀
closing_rectangle1(SelectedRegions,RegionClosing,150, 200)
*开运算
opening_rectangle1(RegionClosing,RegionOpening,10,10)
*获取最小外接矩形
smallest_rectangle2(RegionOpening,Row,Column,Phi,Length1, Length2)
*产生最小外界矩形
gen_rectangle2(Rectangle,Row,Column,Phi,Length1,Length2)
*获取数量
count_obj(RegionOpening,Number)
* 仿射变换
a:=deg(Phi)
if(a<-90)
if(a<=-180)
a:=180+a
Phi:=rad(a)
endif
endif
vector_angle_to_rigid(Row, Column, Phi, Row, Column, Phi, HomMat2D)
affine_trans_region(Rectangle, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
affine_trans_image(Image, ImageAffineTrans, HomMat2D, 'constant', 'false')
*裁剪
reduce_domain(ImageAffineTrans,RegionAffineTrans,ImageReduced)
endfor
字符分割
*裁剪
reduce_domain(ImageAffineTrans,RegionAffineTrans,ImageReduced)
*做车牌处理,字符分割
decompose3(ImageReduced,r,g,b)
*阈值处理
threshold(r,Region,140, 255)
*去除噪声
opening_rectangle1(Region, RegionOpening1, 1,2)
connection(RegionOpening1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 91, 306.9)
*排序
sort_region(SelectedRegions1, SortedRegions, 'character', 'true', 'column')
字符识别
count_obj(SortedRegions,Number)
if(Number == 6)
*反转图片
invert_image(r,ImageInvert)
*分类识别
read_ocr_class_mlp('Industrial_0-9A-Z_Rej.omc', OCRHandle)
do_ocr_multi_class_mlp(SortedRegions, ImageInvert, OCRHandle, Class, Confidence)
*车牌中没有I,将识别的I改成1
dev_clear_window()
dev_display(Image)
set_display_font(WindowHandle,50, 'mono', 'true', 'false')
carNumber:=''
for Index:=1 to |Class|-1 by 1
data:=Class[Index]
if(data=='I')
data:=1
endif
carNumber:=carNumber+data
endfor
endif
dev_set_color('red')
set_tposition(WindowHandle,150,100)
write_string(WindowHandle,carNumber)
多张图片
dev_close_window()
dev_open_window(0,0,512,400,'black',WindowHandle)
list_image_files('C:/Users/Augustine/Desktop/车牌照图片','jpg',[],ImageFiles)
for i:=0 to |ImageFiles|-1 by 1
read_image(Image, ImageFiles[i])
*获取三色通道
decompose3(Image, r, g, b)
*将三色通道处理为hsv
trans_from_rgb(r,g,b,h,s,v,'hsv')
*按照s方式阈值处理
threshold (s, Regions, 177, 251)
*膨胀运算
dilation_rectangle1(Regions, RegionDilation, 1, 3)
connection(RegionDilation, ConnectedRegions)
*选择特征
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 6639.49, 9284.42)
*闭运算,先膨胀在腐蚀
closing_rectangle1(SelectedRegions,RegionClosing,150, 200)
*开运算
opening_rectangle1(RegionClosing,RegionOpening,10,10)
*获取数量
count_obj(RegionOpening,Number)
if(Number!=1)
if(Number ==0)
*换通道定位车牌,处理第二张
threshold (s, Regions1, 108, 188)
connection(Regions1, ConnectedRegions2)
select_shape (ConnectedRegions2, SelectedRegions2, ['column','row','area'], 'and', [145.61,385.75,81.52], [335.57,411.74,10000])
opening_rectangle1(SelectedRegions2, RegionOpening2, 2, 3)
connection(RegionOpening2, ConnectedRegions3)
select_shape (ConnectedRegions3, SelectedRegions3, ['row','column'], 'and', [376.792,145.61], [414.427,380.38])
closing_circle(SelectedRegions3, RegionClosing1,3)
closing_rectangle1(RegionClosing1, RegionClosing2, 15, 30)
connection(RegionClosing2, ConnectedRegions4)
select_shape (ConnectedRegions4, SelectedRegions4, 'area', 'and', 31.36, 3920.25)
opening_rectangle1(SelectedRegions4, RegionOpening, 3, 2)
erosion_circle(RegionOpening, RegionOpening, 1.5)
endif
endif
*获取最小外接矩形
smallest_rectangle2(RegionOpening,Row,Column,Phi,Length1, Length2)
*产生最小外界矩形
gen_rectangle2(Rectangle,Row,Column,Phi,Length1,Length2)
* 仿射变换
a:=deg(Phi)
if(a<-90)
if(a<=-180)
a:=180+a
Phi:=rad(a)
endif
endif
vector_angle_to_rigid(Row, Column, Phi, Row, Column, Phi, HomMat2D)
affine_trans_region(Rectangle, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
affine_trans_image(Image, ImageAffineTrans, HomMat2D, 'constant', 'false')
*裁剪
reduce_domain(ImageAffineTrans,RegionAffineTrans,ImageReduced)
*做车牌处理,字符分割
decompose3(ImageReduced,r,g,b)
*阈值处理
threshold(r,Region,140, 255)
*去除噪声
opening_rectangle1(Region, RegionOpening1, 1,2)
connection(RegionOpening1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 91, 306.9)
*排序
sort_region(SelectedRegions1, SortedRegions, 'character', 'true', 'column')
count_obj(SortedRegions,Number)
if(Number!=6)
*第二张图片处理
endif
if(Number == 6)
*反转图片
invert_image(r,ImageInvert)
*分类识别
read_ocr_class_mlp('Industrial_0-9A-Z_Rej.omc', OCRHandle)
do_ocr_multi_class_mlp(SortedRegions, ImageInvert, OCRHandle, Class, Confidence)
*车牌中没有I,将识别的I改成1
dev_clear_window()
dev_display(Image)
set_display_font(WindowHandle,50, 'mono', 'true', 'false')
carNumber:=''
for Index:=1 to |Class|-1 by 1
data:=Class[Index]
if(data=='I')
data:=1
endif
carNumber:=carNumber+data
endfor
endif
dev_set_color('red')
set_tposition(WindowHandle,150,100)
write_string(WindowHandle,carNumber)
endfor