halcon第六讲:基于颜色空间的颜色检测

基于颜色空间的颜色检测(根据HSV空间中的色度图像来识别不同颜色,因为不同颜色有不同的色度范围)

一、halcon例程1:应用范围—>颜色识别—>segment color image in HSV color space。

dev_close_window ()
dev_open_window (0, 0, 640, 480, 'black', WindowHandle)
for i := 1 to 2 by 1
    read_image (Image, 'cable' + i)
    decompose3 (Image, Red, Green, Blue)
    trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
    *对饱和度图像进行二值化
    threshold (Saturation, HighSaturation, 100, 255)
    *在色调图像中抠图
    reduce_domain (Hue, HighSaturation, HueHighSaturation)
    threshold (HueHighSaturation, Yellow, 20, 50)
    connection (Yellow, ConnectedRegions)
    *根据形状选择,‘max_area’为选择面积最大的连通域
    select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
    closing_circle (SelectedRegions, Yellow, 3.5)
    reduce_domain (Image, Yellow, ImageReduced)
    dev_display (HueHighSaturation)
    dev_display (ImageReduced)
    stop ()
endfor

运行结果如下:

halcon第六讲:基于颜色空间的颜色检测_第1张图片halcon第六讲:基于颜色空间的颜色检测_第2张图片

二、halcon例程2:应用范围—>颜色识别—>sort fuses bu color。

dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

*五种不同颜色的熔断丝
color:=['Orange','Red','Blue','Yellow','Green']
*各颜色对应的色度范围,可在Hue图像的灰度直方图中二值化查看其范围,也可在Hue图像中ctrl加鼠标查看大致范围, 还可在画图的编辑颜色中查看。
HueRange:=[10,30,0,10,125,162,30,64,96,128]

for i:=0 to 4 by 1
    read_image (Image, 'color_fuses_0'+i)
    dev_display (Image)
    
    set_tposition (WindowHandle, 24, 512)
    write_string (WindowHandle, 'color_fuses_0'+i+'.png')
    
    *从色度图像中抠图
    decompose3 (Image, Red, Green, Blue)
    trans_from_rgb (Red, Green, Blue, Hue, Saturation, Value, 'hsv')   
    threshold (Saturation, Regions, 60, 255)
    reduce_domain (Hue, Regions, ImageReduced)
      
    for j:=0 to 4 by 1
        threshold (ImageReduced, Region, HueRange[2*j], HueRange[2*j+1])
        connection (Region, ConnectedRegions)
        fill_up (ConnectedRegions, RegionFillUp)      
        select_shape (RegionFillUp, SelectedRegions, 'area', 'and', 2800, 20000)
        area_center (SelectedRegions, Area, Row, Column)      
        for k:=0 to |Area|-1 by 1
            set_tposition (WindowHandle, Row[k], Column[k])
            write_string (WindowHandle, color[j])
        endfor
        disp_message (WindowHandle, color[j]+':'+|Area|, 'window', 20*j, -1, 'blue', 'false')       
    endfor
    disp_continue_message (WindowHandle, 'black', 'true')
    stop()
endfor

识别结果如下:

halcon第六讲:基于颜色空间的颜色检测_第3张图片halcon第六讲:基于颜色空间的颜色检测_第4张图片

halcon第六讲:基于颜色空间的颜色检测_第5张图片halcon第六讲:基于颜色空间的颜色检测_第6张图片

 halcon第六讲:基于颜色空间的颜色检测_第7张图片

你可能感兴趣的:(halcon)