1、范例程序
//先新建一个窗口,用于显示图片
dev_open_window(0,0,-1,-1,'black',testWin)
//打开一张图片(第一个参数是名字(自定义),第二个参数是路径)
read_image (Die03,'C:/Users/Public/Documents/MVTec/HALCON-13.0/examples/images/die/die_03.png')
//从图片Die03中找出灰度值为128-255的区域输出到区域brightRegion
threshold (Die03,brightRegion, 128, 255)
//找出能包含区域brightRegion的最小矩形区域输出到区域RegionTrans
shape_trans(brightRegion, RegionTrans, 'rectangle1')
//通过最小矩形区域确定出裁剪后的图片并输出到ImageReduced(图片)
reduce_domain(Die03, RegionTrans, ImageReduced)
注:上述步骤是用于缩减要处理的图片,为之后的处理提高效率
注:connection输出的是一个区域数组
//在裁剪后的图片上找出灰度值为0-50的区域输出到区域Region
threshold(ImageReduced, Region, 0, 50)
//填充区域Region并输出到RegionFillUp
fill_up_shape(Region, RegionFillUp, 'area', 1, 100)
//将区域ReRegionFillUp区域中不是圆的部分移除,结果输出到区域rmNoneCircle
opening_circle(RegionFillUp, rmNoneCircle, 15.5)
//由于rmNoneCircle是图片的一部分,调用这个算子将它独立出来输出到区域circleRegions
//抽出独立的物体组成一个区域
connection(rmNoneCircle, circleRegions)
//选择满足0.85-1.0范围的圆的区域,输出到finalRegion
select_shape (circleRegions, finalRegion,'circularity', 'and', 0.85, 1.0)
//将finalRegion区域数量统计出来,输出到变量Number
count_obj(finalRegion, Number)
//找出包含区域的最小圆
smallest_circle(finalRegion, Row, Column, Radius)
2、语法
|XXXX|:求XXXX中的元素个数
Sum(XXXX):求XXXX中元素的和
3、效果(最终结果是找出紫色部分的圆形空洞)
4、范例程序2
//打开一个窗口用于显示图片
dev_open_window(0,0,-1,-1,'black',winHandle)
//打开一副图片并命名为Die03
read_image (Die03,'C:/Users/Public/Documents/MVTec/HALCON-13.0/examples/images/die/die_03.png')
//等待用户在图片上画出矩形,所绘制的矩形参数传递给Row1 Column1…等参数
draw_rectangle1(winHandle, Row1, Column1, Row2, Column2)
//用用户绘制矩形时所确定的参数生成一个矩形区域,结果传递给tmpRect
gen_rectangle1(tmpRect, Row1, Column1, Row2, Column2)
//用矩形区域裁剪出用于处理的图像输出到ImageReduced,用来提高效率
reduce_domain(Die03, tmpRect, ImageReduced)
//用那个小区域的图片生成一个模板
create_template(ImageReduced, 5, 4, 'sort', 'original', TemplateID)
//用户绘制的矩形的中点
tmpRow :=(Row1+Row2)/2
tmpCol :=(Column1+Column2)/2
//将图片和模板快速匹配,输出匹配的区域到Matches
fast_match (Die03,Matches, TemplateID, 20)
//将区域从图像独立出来并拆分,结果输出到circleRegions(一个存放区域的数组)
connection (Matches,circleRegions)
//统计出匹配的区域数量(即数组的元素个数)
count_obj(circleRegions, Number)
//注:circleRegions是一个独立于图像的区域,无法匹配
//所以下面这个算子是将图片Die03中的原始数据输入到circleRegions形成新的图片输出到tmpImage
add_channels(circleRegions, Die03, tmpImage)
//在tmpImage中与模板匹配的区域,将匹配的坐标信息存出到数组Row和Column
best_match(tmpImage, TemplateID, 20, 'true', Row, Column, Error)
//将匹配的矩形绘制出来
disp_rectangle1(winHandle, Row1+Row-tmpRow, Column+Column1-tmpCol, Row+Row2-tmpRow,Column+Column2-tmpCol)
运行效果如下图