*刷新窗口 关
dev_update_window('off')
*命名 给选出来的东西一个名字(a是个变量,可以随便用,只要是英文)
a:=['橙色','红色','蓝色','黄色','绿色']
*分类 要选出来的东西有几类(fusetypes用于循环,可随便命名,只要是英文)
fusetypes:=[1,2,3,4,5]
*命名好灰度值范围 某个东西有一定的范围(如:橙色10-30,红色0-10。。也可以是大小“面积”,形状)
hueranges:=[10,30,0,10,125,162,30,64,96,128]
*关闭窗口( 先关窗口是确保窗口在特殊情况下没关)
dev_close_window ()
*打开窗口
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*读取图像
read_image (Image, '颜色识别图片.png')
*显示图像
dev_display (Image)
*设置窗口 用于显示内容(第二、三个参数是要在什么位置显示)
set_tposition (WindowHandle, 10, 512)
*在设置好的窗口显示内容 第二个参数是要的内容
write_string (WindowHandle, '颜色识别')
*拆分成RGB图像
decompose3 (Image, Red, Green, Blue)
*RGB图像转成HSV图像
trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
*灰度化(对S分量的图像进行灰度化,选出要的几个东西)
threshold (Saturation, Regions, 60, 261)#也可直接在Hue上选取
*区域分割 在H分量中分割出进行过灰度化的S分量的区域(我们要是H分量进行处理。。。)
reduce_domain (Hue, Regions, ImageReduced)
*建立循环 fuse是变量,可以是字母也可以是英文
*在fusetypes类中从0开始处理,每次处理一个
for fuse:=0 to |fusetypes| -1 by 1
*把分割出来的区域进行灰度化(注意:灰度化的值由第三(最小值)、四个参数(最大值)决定)
*hueranges在开始时就已分好范围
* 如:fuse=0, 则值是 10-30,fuse=1 则值是 0-10
threshold (ImageReduced, Regions1,hueranges[fuse*2],hueranges[fuse*2+1])
*断开连通域
connection (Regions1, ConnectedRegions)
*填冲
fill_up (ConnectedRegions, RegionFillUp)
*特征选择 (注意:不能选与位置有关的特征,本程序是用面积特征选出来的,
*面积的选择不能太小也不能太大,不然会选不出来)
select_shape (RegionFillUp, SelectedRegions, 'area', 'and', 3998.14, 10000)
*求面积、中心坐标(用于显示要显示内容的位置)
area_center (SelectedRegions, fuseArea, Row, Column)
*设置要显示内容字体的颜色
dev_set_color ('red')
*循环 本循环是用于显示得到的东西名字, |fuseArea|表示个
for i:=0 to |fuseArea| -1 by 1
*设置窗口 用于显示内容(第二、三个参数是要在什么位置显示,本指令的位置是可变(i是个变量))
set_tposition (WindowHandle, Row[i], Column[i]-15)
*在设置好的窗口显示内容 第二个参数是要的内容(本条的内容是根据a命名好的名字于 变量
*fuse来显示的,fusea的值是由上一条循环决定的,上一条循环的处理的是什么会有对应的值)
write_string (WindowHandle, a[fuse])
*结束循环( 注意: 循环必须是成对出现的,不然就会出错 )
endfor
*显示本程序的运算结果
*设置窗口 用于显示内容
set_tposition (WindowHandle, 16*[fuse+1], 16)
*在设置好的窗口显示内容 用‘’的是直接显示出来的内容 第二个参数是要的内容
* (显示:名字 数量》必须用| |括住)
write_string (WindowHandle, a[fuse]+' '+|fuseArea|)
disp_message (3600, '关注微信公众号(机器人配视觉 ind400)', 'window', 300, 120, 'black', 'true')
endfor
*刷新窗口 开(在程序执行完成了刷新窗口,不然会出错 )
dev_update_window('on')
Halcon颜色识别color_fuses.hdev:classify fuses by color
于 2022-02-11 17:34:03 首次发布