Halcon颜色识别color_fuses.hdev:classify fuses by color

*刷新窗口   关
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')

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值