首先先介绍一下我用的是HALCON中的HDevelop软件。
大家下载好软件后可以测试一下:
在程序编辑器窗口中输入下面指令:
read_image(Image,'monkey')
那么如果出现这样的图片,说明是没有问题的

那么本次编程采用的是下面这张图片

我们要达到的效果是这样的

其实代码很简单,我不过多说明
- *读图
- *以相对路径方式
- *这里的代码叫算子
- read_image(Image,'./img/1')
- *通道分解 将多通道原图分解成RGB单通道灰度图像
- *灰度值范围:0-255 灰度值越大,像素点越亮;反之,则越暗
- decompose3(Image,R,G,B)
-
- *阈值分割 阈值:灰度值区间【44, 255】
- *对R通道图像上的所有像素点灰度值进行判断
- *只要灰度值区间在【44, 255】内的像素点,就会被激活区域
- *最终所有找出来的区域,都被放在区域Regions
- *操作对象:图像R(有像素点)-》Regions(无像素点)
- *颜色不是区域的特征
- threshold (R, Regions, 44, 255)
-
- *上一步由阈值分割得到的区域,其连通性为一个整体
- *连通域打散(破坏连通性)
- connection(Regions,ConnectedRegions)
- *特征筛选(利用面积特征对ConnectedRegions进行筛选得到目标区域)
- *目标区域也称感兴趣区域(ROI)
- *ROI:Region of interesting
- select_shape(ConnectedRegions,SelectedRegions,\
- 'area','and',170000,180000)
- *填充ROI上的孔洞
- fill_up(SelectedRegions,RegionFillUp)
- *获取填充后的目标区域的中心点行列坐标
- area_center(RegionFillUp,Area,Row,Column)
- *利用上一步获得的行列坐标值,绘制中心十字(亚像素轮廓)
- *中心十字80:像素值 Π/4=0.785398,旋转45度
- gen_cross_contour_xld(Cross,Row,Column,80,0)
-
- **可视化**
- *清空窗口
- dev_clear_window()
- *展示原图
- dev_display(Image)
- *对区域以及亚像素轮廓进行显示的预设值
- *1、设置显示的颜色
- dev_set_color('green')
- *2、设置线宽
- dev_set_line_width(5)
- *3、设置区域显示为“仅轮廓”显示
- dev_set_draw('margin')
-
- *展示亚像素轮廓(中心十字)
- dev_display(Cross)
- *展示目标区域
- dev_display(RegionFillUp)
- *设置字体
- *3600:窗口句柄
- set_display_font(3600, 16, '楷体', 'true', 'false')
-
- *展示文字信息
- *disp_message(3600, '中心点坐标:('+Row+','+Column+')',\
- 'image', 0, 0, 'red', 'true')
- disp_message(3600, '中心点坐标:('+Row+','+Column+')',\
- 'image', Row, Column, 'red', 'true')