首先先介绍一下我用的是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')