halcon的for循环里向外传参

目录

一、传递数组变量

二、传递图形/3d变量

三、进阶,一次存两个变量

一、传递数组变量,PeakRows和PeakCols即可拿到点集合。

PeakRows:=[]
PeakCols:=[]

for i := 1 to Number by 1
    select_obj (SortedContours, ObjectSelected, i)
    get_contour_xld (ObjectSelected, RowR, ColR)
    if(LeftOrRight=='left')
        sortcol:=ColR   
    endif
    if(LeftOrRight=='right')
        sortcol:=-ColR   
    endif
    tuple_sort_index (sortcol, Indices)
    PeakRow := RowR[Indices[0]]
    PeakCol := ColR[Indices[0]]
    PeakRows := [PeakRows,PeakRow]
    PeakCols := [PeakCols,PeakCol]
    disp_message (WindowHandle, '顶点'+i+':'+PeakRow+','+PeakCol, 'window', MessagePosition+(i-1)*20, 5, 'cyan', 'false')
    disp_cross (WindowHandle, PeakRows, PeakCols, 12, rad(45))
    disp_message (WindowHandle, i, 'image', round(PeakRow), round(PeakCol), 'red', 'false')
Endfor

二、传递图形/3d变量

gen_empty_obj(shuzuCircles)
tuple_length (CircleRadius, LengthR)
 
for index:=0 to LengthR-1 by 1
    *Radius[index]<200是刚掉超级大的圆   
    if(CircleRadius[index]<200 and CircleRow[index]<200)
       gen_circle_contour_xld (ContCircle,  CircleRow[index], CircleColumn[index], CircleRadius[index], 0, rad(360), 'positive', 1.0)
       *计算圆与轮廓的交叉点
       intersection_circle_contour_xld (FittedLines1Vis, CircleRow[index], CircleColumn[index], CircleRadius[index], 0, 6.28318, 'positive', RowCha, ColumnCha)             
       concat_obj (shuzuCircles, ContCircle, shuzuCircles)    
    endif
endfor
dev_clear_window()
*显示筛选后的多个圆
dev_set_color('green')
dev_display (shuzuCircles)

三、每次传递两个/多个参数

 

*根据两个波峰的位置找到波谷
for a := 0 to arr_ValleyX-1 by 1
*这块的判断非常重要,这个里面波峰的排列是从大数到小数的,所以波谷的y坐标是比前一个波峰小,比后一个波峰大的
     if(Pos_ValleyX[a]<Pos_PeakX[j] and Pos_ValleyX[a]>Pos_PeakX[j+1])
            distance_pl (Pos_ValleyX[a], Pos_ValleyY[a], Pos_PeakX[j], Pos_PeakY[j], Pos_PeakX[j+1], Pos_PeakY[j+1], DistancePL)
             if(DistancePL>5)
             *distance2:=[distance2,j]
             *注意此处写法,一个波谷对应两个波峰,所以传递参数distance2是每次存两个序数
                  tuple1[0] := j
                  tuple2[0] := j+1
                  tuple_concat(tuple1,tuple2, concat)
                  distance2:=[distance2,concat]
                  distance1:=[distance1,a]
              endif
     endif
endfor

上面代码是找到波峰和波谷以后,想要检测宽度过大的波峰和深度较深的波谷,就需要让波峰和波谷进行对应,因此,将波峰成对存储,一个波谷对应两个波峰,波谷的坐标index为i,那么波峰index就为2*i和2*i+1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大胡子大叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值