快捷搜索:  汽车  科技

halcon相关的机器视觉检测书籍(Halcon下颜色识别与联合C)

halcon相关的机器视觉检测书籍(Halcon下颜色识别与联合C)3、Halcon代码:第一张第二张2、效果演示:

一、简介

目前做机器视觉的软件有很多,例如Halcon、OpenCV、VisionPro、LabVIEW软件、MATLAB相关的工具箱等等,今天用Halcon做一个颜色识别的小实验。

二、过程

1、用windows自带绘图软件做了下面两张简单的图,第一张用来训练,训练好后进行识别第二张的颜色;

halcon相关的机器视觉检测书籍(Halcon下颜色识别与联合C)(1)

第一张

halcon相关的机器视觉检测书籍(Halcon下颜色识别与联合C)(2)

第二张

2、效果演示:

halcon相关的机器视觉检测书籍(Halcon下颜色识别与联合C)(3)

3、Halcon代码:

*此过程将dev_update_pc、dev_update_var和dev_update_window设置为“关闭” *dev_update_off () *关闭窗口 dev_close_window () *定义一个数组存放字符串 FuseColors := ['红色' '绿色' '青色' '蓝色'] *创建一个空元组Classes gen_empty_obj (Classes) *读一张图像 read_image (Image 'C:/Users/Administrator.SKY-20200326UAW/Desktop/1.png') *获得图像的宽和高 get_image_size (Image Width Height) *打开一个和刚才获得的图像大小相同的窗口 dev_open_window (0 0 Width Height 'black' windowHandle) *窗口显示刚才读取的图像Image dev_display (Image) *定义区域的填充模式为边缘模式 dev_set_draw('margin') *设置颜色为黑色 dev_set_color ('black') *设置字体样式 set_display_font (WindowHandle 14 'mono' 'true' 'false') *在图片上显示消息 disp_message (WindowHandle '使用鼠标左键框选红色,并按鼠标右键确定选择' 'window' 12 12 'black' 'false') *画一个平行于坐标轴的矩形,包含图片中红色部分 draw_rectangle1 (WindowHandle Row1 Column1 Row2 Column2) *用刚才选中的区域创建一个与坐标轴平行的矩形 gen_rectangle1 (ROI_0 Row1 Column1 Row2 Column2) *连接两个标志性对象元组 concat_obj (Classes ROI_0 Classes) *显示Image图像 dev_display (Image) *显示区域Classes dev_display (Classes) disp_message (WindowHandle '使用鼠标左键框选绿色 ,并按鼠标右键确定选择' 'window' 12 12 'black' 'false') *画一个平行于坐标轴的矩形,包含图片中绿色部分 draw_rectangle1 (WindowHandle Row11 Column11 Row21 Column21) gen_rectangle1 (ROI_1 Row11 Column11 Row21 Column21) concat_obj (Classes ROI_1 Classes) dev_display (Image) dev_display (Classes) disp_message (WindowHandle '使用鼠标左键框选青色,并按鼠标右键确定选择' 'window' 12 12 'black' 'false') *画一个平行于坐标轴的矩形,包含图片中青色部分 draw_rectangle1 (WindowHandle Row12 Column12 Row22 Column22) gen_rectangle1 (ROI_2 Row12 Column12 Row22 Column22) concat_obj (Classes ROI_2 Classes) dev_display (Image) dev_display (Classes) disp_message (WindowHandle '使用鼠标左键框选蓝色,并按鼠标右键确定选择' 'window' 12 12 'black' 'false') *画一个平行于坐标轴的矩形,包含图片中蓝色部分 draw_rectangle1 (WindowHandle Row13 Column13 Row23 Column23) gen_rectangle1 (ROI_3 Row13 Column13 Row23 Column23) concat_obj (Classes ROI_3 Classes) dev_display (Classes) *创建高斯混合模型进行分类 create_class_gmm (3 4 1 'spherical' 'normalization' 10 42 GMMHandle) *将图像中的训练样本添加到高斯混合模型的训练数据中,其中Classes是被训练的区域 add_samples_image_class_gmm (Image Classes GMMHandle 0) *训练高斯混合模型 train_class_gmm (GMMHandle 100 0.001 'training' 0.0001 Centers Iter) *使用高斯混合模型创建查找表以对字节图像进行分类 create_class_lut_gmm (GMMHandle [] [] ClassLUTHandle) *清除高斯混合模型 clear_class_gmm (GMMHandle) *读一张图片放到Image1,然后识别其中的颜色 read_image (Image1 'C:/Users/Administrator.SKY-20200326UAW/Desktop/2.png') *显示Image1 dev_display (Image1) *使用查找表对字节图像进行分类 classify_image_class_lut (Image1 ClassRegions ClassLUTHandle) *For循环依次识别'红色' '绿色' '青色' '蓝色' for Fuse := 1 to 4 by 1 *复制HALCON数据库中的图标对象 copy_obj (ClassRegions ObjectsSelected Fuse 1) *用圆形结构元素关闭区域 closing_circle (ObjectsSelected RegionClosing 3.5) *计算区域的连通分量 connection (RegionClosing ConnectedRegions) *借助形状特征选择区域 select_shape (ConnectedRegions SelectedRegions 'area' 'and' 150 99999) *填补区域中的漏洞 fill_up (SelectedRegions RegionFillUp) *计算区域和区域中心 area_center (RegionFillUp Area Row Column) *变换区域的形状 shape_trans (RegionFillUp RegionTrans 'convex') *元组中的对象数 count_obj (RegionTrans Number) *For循环将找到的颜色标注出来 for j := 1 to Number by 1 disp_message (WindowHandle FuseColors[Fuse - 1] 'image' Row[j - 1] - 10 Column[j - 1] - 10 'black' 'true') endfor endfor

猜您喜欢: