HDevelop实现图片中局部图形识别标记

来源:互联网 发布:全能视频转换器软件 编辑:程序博客网 时间:2024/06/05 02:14

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中与模板匹配的区域,将匹配的坐标信息存出到数组RowColumn

best_match(tmpImage, TemplateID, 20, 'true', Row, Column, Error)

//将匹配的矩形绘制出来

disp_rectangle1(winHandle, Row1+Row-tmpRow, Column+Column1-tmpCol, Row+Row2-tmpRow,Column+Column2-tmpCol)

 

运行效果如下图


 

原创粉丝点击