背景
我们可以用select_shape_xld (Edges, SelectedXLD, 'area', 'and', 49000, 100000)
对面积筛选,但有时这得到的是一个数值,而不是一个值。
而我们想得到这个数组中的最大值,该怎么做呢?
获取最大的面积的轮廓
*面积选择
select_shape_xld (Edges, SelectedXLD, 'area', 'and', 49000, 100000)
area_center_xld (SelectedXLD, Area, Row, Column, PointOrder)
tuple_sort_index (-Area, Indices)
select_obj (SelectedXLD, SelectedXLD, Indices[0]+1)
这里那轮廓类型举例子,select_shape_xld,筛选轮廓面积。可能得到多个轮廓,此时通过 area_center_xld 可以得到轮廓们的具体面积大小。
此时Area就是一个数组。
tuple_sort_index
再通过 tuple_sort_index 对数组排序,这个排序是从小到大的。
他会将数组中面积最小的轮廓下标放到最前面。
所以,这里需要注意的是,tuple_sort_index 并不是将Area这个数组本身进行排序,而是得到一个新的下标数组。(这里我将Area前面加了一个负号,最大的就会变成最小的,这样原来最大的就会放到最前面)
select_obj
由于我们得到是下标数组,所以需要select_obj,他可以通过下标选择对象!
但是,这里有个问题需要注意。halcon中HTuple类型计数是从0开始计算的。
而select_obj选择是HObject对象数组,Hobject对象数组是从1开始计数的。
所以这里 Indices[0] 先得到下标数组的第0个值,这个下标对应面积最大轮廓!但是HTuple类型计数是从0开始计算的,而 SelectedXLD对象数组是从1开始计算的,所以,这里Indices里的下标值都需要加上一个1才能对应上SelectedXLD中的对象,于是就有下面这句话了:
select_obj (SelectedXLD, SelectedXLD, Indices[0]+1)
小结
整个过程比较绕,习惯就好啦~~~~