颜色识别与数字字母识别类似,只是多了一步需要将所要识别的颜色进行训练并创建分类器,当然在halcon中,对于数字字母已经有了相应的文件,所以不需要创建分类器这步。
在halcon中,颜色识别的步骤如下:
1、将所需要识别的颜色特征取出来
2、创建分类器并对这些特征进行训练
3、用其他图片进行简单测试
直接上代码:
dev_close_window ()
dev_open_window (0, 0, 557, 416, 'black', WindowHandle)
read_image (Img, 'C:/Users/Public/Documents/MVTec/HALCON-13.0/examples/images/color/color_pieces_00.png')
dev_display (Img)
dev_set_draw ('margin')
dev_set_color ('black')
*建立类
gen_empty_obj (Classes)
color:=['yellow','pink','blue','orange']
for i := 1 to |color| by 1
disp_message (WindowHandle, ['circle the region of '+ color[i-1],'click the right button to comfirm'], 'window', 12, 12, 'black', 'true')
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
concat_obj (Classes, Rectangle, Classes)
endfor
*创建/添加样本/训练分类器
create_class_mlp (3, 10, 4, 'softmax', 'normalization', 10, 42, MLPHandle)
add_samples_image_class_mlp (Img, Classes, MLPHandle)
train_class_mlp (MLPHandle, 400, 1, 0.01, Error, ErrorLog)
*测试
read_image (test, 'C:/Users/Public/Documents/MVTec/HALCON-13.0/examples/images/color/color_pieces_02.png')
dev_display (test)
classify_image_class_mlp (test, ClassRegions, MLPHandle, 0.5)
dev_set_color ('white')
for feature:=1 to 3 by 1
copy_obj (ClassRegions, ObjectsSelected, feature, 1)
connection (ObjectsSelected, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1490.83, 5000)
count_obj (SelectedRegions, Number)
disp_message (WindowHandle, ['the number of '+color[feature-1]+':'+Number], 'window', 50+feature*50, 50, 'black', 'true')
endfor
所用的图片也是halcon里的图片,效果可以,如下:
当然我也将分类变为3种,即将背景颜色去掉,但这时在识别粉色时效果不行,识别不出来,也把自带的例程也试了一下,也是同样的情况,自己也不大明白原因。如果有去掉背景后训练识别成功并知道原因的麻烦告诉我下,谢谢。