步骤
- (先关闭窗体)再打开窗体
- 读取图像
- 转为灰度图
- 二值化(利用灰度直方图)
- 计算连通域(connection)
- blob分析(利用特征直方图)
1、第一部分
1.采集图片
助手->Image Acquisition->自动接口检测->连接->实时
如果要 更换颜色空间为灰色,那么就选择 颜色空间->gray
再次点击连接->实时
设置完后,可以在点击插入代码,就可以在光标处插入
得到
* Image Acquisition 01: Code generated by Image Acquisition 01 open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0] ', 0, -1, AcqHandle) grab_image_start (AcqHandle, -1) while (true) grab_image_async (Image, AcqHandle, -1) * 显示图片 dev_display(Image) endwhile close_framegrabber (AcqHandle)
2.转为灰度图
输入Image,输出GrayImage
rgb1_to_gray(Image,GrayImage)
3.二值化
将程序运行到获得GrayImage,打开灰度直方图
点击阈值(使得红色得叉变成绿色的勾),然后就可以拖动绿色的线来改变阈值了
然后点击插入
threshold (Image, Regions, 121, 254)
注意区域与图像得区别,图像(gray)是有灰度值得,但是区域没有
4.计算连通域分离区域
注意在halcon中,二值化的结果是,区域Region是一整块的,为了使得每一个区域都分离,要加上connection(计算连通区域)
connection (Regions, ConnectedRegions)
5.blob分析
点击特征直方图
可以通过选取面积的最小值和最大值,通过面积来选取特征
同样可以添加特征,比如圆度,越接近1,越接近圆
最后点击插入代码
8.查看区域
通过计算连通域得到的ConnectedRegions,查看,可以右击该图片变量,选择清除/显示,就可以查看该区域了
9.获得面积和区域的中心坐标
area_center (SelectedRegions, Area, Row, Column)
2、第二部分
打开例子
可以找到中值滤波
另外可以在 程序开始的时候输入
关闭窗口和打开窗口
或者适应图片大小,打开窗口
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
填充空洞
输出一条文本信息(disp_message第二个参数,就是输出的文本信息)
描绘边缘
或者在这里,选择margin
3、第5讲完整代码
4.自己的练习
* 读取图像 read_image (Image, 'C:/Users/xuheding/Desktop/1.jpg') * 关闭窗口和打开新的适应图片窗口 dev_close_window() dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) * 转为灰度图 rgb1_to_gray(Image,GrayImage) * 二值化 threshold (GrayImage, Regions, 57, 255) * 计算连通域 connection (Regions, ConnectedRegions) * blob分析 select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 704082, 759740)
原图
处理后的图