原图
代码
dev_update_off ()
dev_close_window ()
*颜色数组
FuseColors := ['Orange','Red','Blue','Yellow','Green']
*画笔颜色数组
DisplayColors := ['coral','red','blue','goldenrod','forest green']
* HSV模型中H分量: Orange 10-30, Red 0-10,Blue 125-162,Yellow 30-64,Green 96-128 ...
HueRanges := [10,30,0,10,125,162,30,64,96,128]
read_image (Image, 'color_fuses_00.png')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
*1、给颜色空间转换创建查找表
create_color_trans_lut ('hsv', 'from_rgb', 8, ColorTransLUTHandle)
Imagepath := 'color_fuses_0'
for i := 0 to 4 by 1
read_image (Image1, Imagepath+i)
dev_display (Image1)
dev_set_draw ('margin')
dev_set_line_width (3)
*2、RGB图像分解R 、G 、 B 通道
decompose3 (Image1, ImageR, ImageG, ImageB)
*3、使用预先生成的查找表进行颜色空间转换。
apply_color_trans_lut (ImageR, ImageG, ImageB, ImageResultH, ImageResultS, ImageResultV, ColorTransLUTHandle)
*4、使用S分量提取保险丝区域
threshold (ImageResultS, Regions, 65, 255)
*5、在H分量中截取保险丝区域
reduce_domain (ImageResultH, Regions, ImageReducedH)
for j := 0 to |FuseColors|-1 by 1
threshold (ImageReducedH, CurrentFuseRegion, HueRanges[2*j], HueRanges[2*j+1])
connection (CurrentFuseRegion, ConnectedRegions)
fill_up (ConnectedRegions, RegionFillUp)
select_shape (RegionFillUp, SelectedRegions, 'area', 'and', 5000, 20000)
shape_trans (SelectedRegions, RegionTrans, 'convex')
smallest_rectangle2 (RegionTrans, Row1, Column1, Phi, Length1, Length2)
dev_set_color (DisplayColors[j])
dev_display (RegionTrans)
for k :=0 to |Row1|-1 by 1
set_tposition (WindowHandle, Row1[k], Column1[k]-0.4*Length1[k])
write_string (WindowHandle, FuseColors[j]+(k+1))
endfor
endfor
disp_message (WindowHandle, '颜色识别结果_'+(i+1), 'window', 10, 10, 'black', 'true')
dump_window (WindowHandle, 'png', '颜色识别结果_'+(i+1))
stop ()
endfor
结果