本文主要是介绍机器视觉——多图颜色检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天我们实现将一组图片导入,然后对它们进行颜色检测分类。
比如下面一组图片:
首先我们需要导入这组图片
之后会在编辑器里面生成这样一段代码
之后再继续相应代码编写 ,我的思路是利用颜色空间转换 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 1read_image (Image, ImageFiles[Index])decompose3(Image, R, G, B)*颜色空间转换 RGB转到HSVtrans_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:=0Number2:=0Number3:=0Number4:=0*清空窗口dev_clear_window()*展示原图dev_display(Image)for i :=1 to Number by 1dev_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+1set_display_font(3600,28, '楷体', 'true', 'false')disp_message(3600,'红色圆片',\'image',Row,Column,'green','false')endifif(gra>30 and gra<50)Number2:=Number2+1set_display_font(3600,28, '楷体', 'true', 'false')disp_message(3600,'黄色圆片',\'image',Row,Column,'green','false')endifif(gra>80 and gra<110)Number3:=Number3+1set_display_font(3600,28, '楷体', 'true', 'false')disp_message(3600,'绿色圆片',\'image',Row,Column,'green','false')endifif(gra>140 and gra<160)Number4:=Number4+1set_display_font(3600,28, '楷体', 'true', 'false')disp_message(3600,'蓝色圆片',\'image',Row,Column,'green','false')endif*stop()wait_seconds(1)endforset_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
这篇关于机器视觉——多图颜色检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!