机器视觉——多图颜色检测

 今天我们实现将一组图片导入,然后对它们进行颜色检测分类。

比如下面一组图片:

首先我们需要导入这组图片 

 

之后会在编辑器里面生成这样一段代码 

 之后再继续相应代码编写 ,我的思路是利用颜色空间转换 RGB转到HSV

trans_from_rgb(R, G, B, H, S, V, 'hsv')

先以V图进行灰度值分割,在特征筛选出所有瓶盖。之后再循环遍历出每个瓶盖的像素点行列坐标,将得到的行列坐标元组利用get_grayval算子得到每个像素点灰度值。

将取到的灰度值进行取中值,因为每个颜色不同,中值也就不同。

再利用if语句,根据中值不同,分别得到不同的颜色。

完整代码(附有注释,很详细)

list_files ('./img/彩色圆片', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    decompose3(Image, R, G, B)
    *颜色空间转换 RGB转到HSV
    trans_from_rgb(R, G, B, H, S, V, 'hsv')
    threshold (V, Regions, 80, 255)
    connection(Regions, ConnectedRegions)
   
    select_shape(ConnectedRegions,SelectedRegions,\
                 'area','and',80000,240000)
    count_obj(SelectedRegions,Number)
    *定义四个变量,分别统计各种颜色数量
    Number1:=0
    Number2:=0
    Number3:=0
    Number4:=0
    *清空窗口
    dev_clear_window()
    *展示原图
    dev_display(Image)
    for i :=1 to Number by 1
        dev_update_off()
        select_obj(SelectedRegions, ObjectSelected, i)
        get_region_points(ObjectSelected, Rows, Columns)
        get_grayval(H, Rows, Columns, Grayval)
        gra:=median(Grayval)
        area_center(ObjectSelected,Area,Row,Column)
        if(gra>0 and gra<20)
            Number1:=Number1+1
            set_display_font(3600,28, '楷体', 'true', 'false')
            disp_message(3600,'红色圆片',\
                        'image',Row,Column,'green','false')
        endif
        if(gra>30 and gra<50)
            Number2:=Number2+1
            set_display_font(3600,28, '楷体', 'true', 'false')
            disp_message(3600,'黄色圆片',\
                        'image',Row,Column,'green','false')
        endif
        if(gra>80 and gra<110)
            Number3:=Number3+1
            set_display_font(3600,28, '楷体', 'true', 'false')
            disp_message(3600,'绿色圆片',\
                        'image',Row,Column,'green','false')
        endif
        if(gra>140 and gra<160)
            Number4:=Number4+1
            set_display_font(3600,28, '楷体', 'true', 'false')
            disp_message(3600,'蓝色圆片',\
                        'image',Row,Column,'green','false')
        endif
        
        *stop()
        wait_seconds(1)
    endfor
    set_display_font(3600,28, '楷体', 'true', 'false')
            disp_message(3600,'红色圆片数量:'+Number1,\
                        'image',10,10,'black','true')
            disp_message(3600,'黄色圆片数量:'+Number2,\
                        'image',110,10,'black','true')
            disp_message(3600,'蓝色圆片数量:'+Number3,\
                        'image',210,10,'black','true')
            disp_message(3600,'绿色圆片数量:'+Number4,\
                        'image',310,10,'black','true')
    *stop()
    wait_seconds(1)
endfor

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值