halcon是个好东西,里面有诸多的“轮子”,随着版本的迭代“轮子”会越来越多越来越全面和完善。我用的halcon12里面有一种颜色识别的算法,它这种颜色识别是需要将图像先转换成“HSV”模型,这种模型在后期的使用上还是发现了它的不足(针对一些特殊案例)于是我想既然RGB是三原色,所有的颜色都能按照它们的不同比例合成,何不直接操作RGB三原色的配色值来确定图像中的颜色呢?
测试:
图:
这里将识别图中的 亮蓝色,我们先打开画图工具查看这种颜色的RGB配色值
代码:
*要识别的颜色参数
R:=128
G:=255
B:=255
read_image (Image, 'C:/Users/斌/Desktop/test.png')
get_image_size (Image, Width, Height)
*遍历所有像素
for i := 0 to Height-1 by 1
for j := 0 to Width-1 by 1
*获取像素量级
get_grayval (Image, i, j, Grayval)
*识别颜色
if (Grayval[0] == R and Grayval[1] == G and Grayval[2] == B)
*将选中的颜色填充为红色
set_grayval (Image, i, j, [255,0,0])
endif
endfor
endfor
效果(图中箭头所指的红方框,代码里面将其填充为红色了):
代码的运行速度还是非常的差,仅供参考。
最后,不针对特殊案例还是建议采用“HSV模型”,因为这种模型考虑了一种颜色在实际环境中不同亮度情况下的视觉表现。倘若一种颜色在偏暗偏亮两种环境下采用RGB配色算法来确定这种颜色,那很可能会是两个截然不同的配值。