halcon数组的一些使用

halcon数组的一些使用

没啥好讲的,这里对于不是数组部分的东西就不进行讲解了。

  1. area_center(RegionOpening,Area, Row, Column)。使用area_center来求区域的中心和面积时,返回Area, Row, Column这三个参数。当区域的个数大于1时,Area, Row, Column都是一个数组

    返回的Area, Row, Column这个三个数组,Area是根据面积从小到达进行排序的,Row和Column是对应Area的区域的中心,即Row和Column的第一个元素是面积最小的区域的中心坐标

  2. tuple_sort_index(Column,Sorted_Column):对Column进行排序(从小到大),返回的是排序后的元素的索引。例如Column是【300,200, 100】,返回的Sorted_Column=【2,1,0】
  3. new_row := Row[Sorted_Column]:让Row以Sorted_Column的方式进行排序,然后将值赋予new_row。例如Row=【20, 10, 50】,Sorted_Column=【2,1,0】----->  Row[Sorted_Column]  = 【50,10,20】
  4. Halcon中的数组只能是1xN的数组, 即数组里面不能套数组

read_image(Image, 'printer_chip/printer_chip_01')
*显示图像

*开启一个大小为512,512的窗口
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
dev_display(Image)
*在窗口上绘制矩形ROT区域
draw_rectangle1(WindowHandle, Row1, Column1, Row2, Column2)
*生成矩形ROI区域
gen_rectangle1(Rectangle_Roi, Row1, Column1, Row2, Column2)
*对图片进行处理,只留下ROI区域的图像,其余部分都变成黑的
reduce_domain(Image, Rectangle_Roi, ImageReduced)

*对图片进行均值滤波操作,10,10是kernel的大小
mean_image(ImageReduced, ImageMean, 10, 10)
*对原图和均值后的图进行像素值求差计算,如果差值超过5则保留
dyn_threshold(ImageReduced, ImageMean, RegionDynThresh, 5, 'dark')
*将区域打散
connection(RegionDynThresh, ConnectedRegions)
*使用面积来进行过滤
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 4000, 99999)
*对区域进行填充
fill_up(SelectedRegions, RegionFillUp)
*使用大小为50*50的矩形区域来进行开开运算操作,放的下50*50矩阵的区域保留,放不下的就剔除
opening_rectangle1(RegionFillUp, RegionOpening, 50, 50)
*统计区域的数量
count_obj(RegionOpening, Number)
*求每一个区域的中心和面积,当区域的个数大于1时,Area, Row, Column都是一个数组
area_center(RegionOpening,Area, Row, Column)
*因为区域都在同一水平线上,所以根据column来进行排序操作,从小到大。返回的是排序后index的数组
tuple_sort_index(Column,Sorted_Column)

*halcon里的数组操作,就是把Row和Column的元素按照上面的排序方式来排序
new_row := Row[Sorted_Column]
new_column := Column[Sorted_Column]

*创建一个数组来统计相邻的两个区域之间的距离
distance_list := []
*使用for循环来遍历,计算当前区域和下一个区域的距离
for j := 0 to Number-1 by 1
    *描绘出区域的中心位置
    gen_circle(Circle, new_row[j], new_column[j], 10)
    *因为这里要描绘出每个区域的中心,所以j等于Number-1还要绘制中心
    *但j等于Number-1的时候就不计算距离了,因为Number-1已经是最后一个区域了,没有别的区域能和他计算距离了
    *所以使用break跳出循环
    if (j == Number-1)
       break
    endif
    *计算点和点之间的距离公式,new_row[j], new_column[j]是第一个点的坐标
    distance_pp(new_row[j], new_column[j], new_row[j+1], new_column[j+1], Distance)
    *将两个局域的距离放入数组。说明一下在halcon数组只能是1xN的数组,不能数组里面套数组
    distance_list[j] := Distance
endfor

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值