一届莽夫1
技术员
技术员
  • 最后登录2020-06-24
  • 发帖数85
  • 金币339枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
阅读:313回复:13

怎么用鼠标左键选择并提取我想要得轮廓

楼主#
更多 发布于:2020-04-19 12:28
图里面的轮廓我是用edges_sub_pix 提取出来的,我现在想通过用鼠标左键选择其中的一条轮廓,选择哪条就提取那条
*********************************

我整理了一下,把鼠标左键选择轮廓后建立XLD模板,加模板识别测试了一下


此帖售价 0 金币,已有 0 人购买 [记录] [购买]
此段为出售的内容,购买后显示
[一届莽夫1于2020-05-25 08:59编辑了帖子]
喜欢1

最新打赏:0人

风景_你好
技术员
技术员
  • 最后登录2020-07-03
  • 发帖数182
  • 金币510枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
沙发#
发布于:2020-04-19 17:58
遍历所有的XLD,通过distance_pc依次计算点到XLD的距离,取距离点最近的XLD
N.黑色铅笔
助理工程师
助理工程师
  • 最后登录2020-07-03
  • 发帖数167
  • 金币1511枚
  • 贡献勋章0枚
  • 社区居民
板凳#
发布于:2020-04-20 10:35
edges_sub_pix(Image68d889dd7fc4f4e225b6cbf0194e0be, Edges, 'canny', 1, 20, 40)


get_mbutton_sub_pix(200000, Row, Column, Button)


gen_circle_contour_xld(ContCircle, Row, Column, 10, 0, 6.28318, 'positive', 1)


count_obj(Edges, Number)


gen_empty_obj(EdgesGet)


for Index := 0 to Number-1 by 1
    
    select_obj(Edges, ObjectSelected, Index+1)
    
    intersection_contours_xld(ContCircle, ObjectSelected, 'all', Row2, Column2, IsOverlapping)
      
    tuple_length(Row2, Length)
    
    if(Length!=0)
        
        EdgesGet:=ObjectSelected
    
    endif
    
endfor
叶风儿123
技术员
技术员
  • 最后登录2020-06-25
  • 发帖数107
  • 金币171枚
  • 贡献勋章0枚
  • 社区居民
地板#
发布于:2020-04-20 13:32
遍历所有的XLD,通过distance_pc依次计算点到XLD的距离,取距离点最近的XLD
一届莽夫1
技术员
技术员
  • 最后登录2020-06-24
  • 发帖数85
  • 金币339枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
4楼#
发布于:2020-04-20 17:33
N.黑色铅笔:edges_sub_pix(Image68d889dd7fc4f4e225b6cbf0194e0be, Edges, 'canny', 1, 20, 40)


get_mbutton_sub_pix(200000, Row, Column...
回到原帖
非常感谢这个兄台,这个方法我之前尝试过,通过画一个圆形轮廓跟亚像素轮廓得到交叉的交点,但是这个有个问题,就是画的圆形轮廓直径如果比较大,可能会找到其他的轮廓线
其实2楼提的那个方法挺好的,用遍历距离的方式,是可以满足功能性需求,就是遍历时间比较长,影响效率了(我300条轮廓大概要1.5s的时间),大神你这边有没有什么高招呢?
一届莽夫1
技术员
技术员
  • 最后登录2020-06-24
  • 发帖数85
  • 金币339枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
5楼#
发布于:2020-04-20 17:37
风景_你好:遍历所有的XLD,通过distance_pc依次计算点到XLD的距离,取距离点最近的XLD回到原帖
非常感谢,我试了这个方法,功能是可以实现,就是遍历时间比较长,影响效率了(我300条轮廓大概要1.5s的时间,这个电脑i5配置相对还好的,如果配置差一点的,会不会崩啊),
风景_你好
技术员
技术员
  • 最后登录2020-07-03
  • 发帖数182
  • 金币510枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
6楼#
发布于:2020-04-20 18:46
一届莽夫1:非常感谢,我试了这个方法,功能是可以实现,就是遍历时间比较长,影响效率了(我300条轮廓大概要1.5s的时间,这个电脑i5配置相对还好的,如果配置差一点的,会不会崩啊),回到原帖
你的轮廓也不是很大啊,看看是不是别的地方耗时比较长。
实在不行设置ROI减少轮廓
一届莽夫1
技术员
技术员
  • 最后登录2020-06-24
  • 发帖数85
  • 金币339枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
7楼#
发布于:2020-04-20 19:15
风景_你好:你的轮廓也不是很大啊,看看是不是别的地方耗时比较长。
实在不行设置ROI减少轮廓
回到原帖
图片是我截的图,实际比这个要大很多
N.黑色铅笔
助理工程师
助理工程师
  • 最后登录2020-07-03
  • 发帖数167
  • 金币1511枚
  • 贡献勋章0枚
  • 社区居民
8楼#
发布于:2020-04-21 09:51
一届莽夫1:非常感谢这个兄台,这个方法我之前尝试过,通过画一个圆形轮廓跟亚像素轮廓得到交叉的交点,但是这个有个问题,就是画的圆形轮廓直径如果比较大,可能会找到其他的轮廓线
其实2楼提的那个方法挺好的,用遍历距离的方式,是可以满足功能性需求,就是遍历时间...
回到原帖
直径累加呗,从1开始,求交集,直到找到目标为止,这样时间也会少点
N.黑色铅笔
助理工程师
助理工程师
  • 最后登录2020-07-03
  • 发帖数167
  • 金币1511枚
  • 贡献勋章0枚
  • 社区居民
9楼#
发布于:2020-04-21 10:02
一届莽夫1:非常感谢这个兄台,这个方法我之前尝试过,通过画一个圆形轮廓跟亚像素轮廓得到交叉的交点,但是这个有个问题,就是画的圆形轮廓直径如果比较大,可能会找到其他的轮廓线
其实2楼提的那个方法挺好的,用遍历距离的方式,是可以满足功能性需求,就是遍历时间...
回到原帖
i:=1
Length:=0
while(1)
    gen_circle_contour_xld(ContCircle, Row, Column, i, 0, 6.28318, 'positive', 1)    
    count_obj(Edges, Number)    
    gen_empty_obj(EdgesGet)    
    for Index := 0 to Number-1 by 1        
        select_obj(Edges, ObjectSelected, Index+1)        
        intersection_contours_xld(ContCircle, ObjectSelected, 'all', Row2, Column2, IsOverlapping)          
        tuple_length(Row2, Length)        
        if(Length!=0)          
            EdgesGet:=ObjectSelected
            break
        endif      
    endfor
    if(Length!=0)            
         break
    else
         i:=i+1
    endif
endwhile
风景_你好
技术员
技术员
  • 最后登录2020-07-03
  • 发帖数182
  • 金币510枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
10楼#
发布于:2020-04-21 19:15
一届莽夫1:图片是我截的图,实际比这个要大很多回到原帖
这种点选的动作肯定有个遍历的操作,只是看你怎么计算的
一届莽夫1
技术员
技术员
  • 最后登录2020-06-24
  • 发帖数85
  • 金币339枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
11楼#
发布于:2020-04-21 23:43
N.黑色铅笔:i:=1
Length:=0
while(1)
    gen_circle_contour_xld(ContCircle, Row, Column, i, 0, 6.28318, 'positive', 1)    
    count_...
回到原帖
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_open_window (20, 500, 512, 512, 'black', WindowHandle1)
dev_set_window (WindowHandle)
read_image (Image, 'E:/Halcon/HalconDemo/课题/轮廓对比度/P13.bmp')
dev_display (Image)
dev_set_window (WindowHandle1)
dev_display (Image)
dev_set_window (WindowHandle)
edges_sub_pix (  Image, Edges, 'canny',2, 15,45)
union_collinear_contours_xld (Edges, UnionContours, 10, 1, 2, 0.5, 'attr_keep')
draw_point (3600, Row4, Column4)
count_obj (Edges, Number)
AllDistanceMin:=[]
count_seconds (Seconds1)
for Index := 1 to Number by 1
select_obj (Edges, ObjectSelected,Index)
distance_pc (ObjectSelected, Row4, Column4, DistanceMin, DistanceMax)
tuple_concat (AllDistanceMin, DistanceMin, AllDistanceMin)    
endfor
tuple_min (AllDistanceMin, Min)
count_seconds (Seconds2)
tuple_find (AllDistanceMin, Min, Indices)
select_obj (Edges, ObjectSelected,Indices[0]+1)
dev_set_window (WindowHandle1)  
dev_display (ObjectSelected)
dev_set_window (WindowHandle)
count_seconds (Seconds3)
time111:=Seconds2-Seconds1
time222:=Seconds3-Seconds2
一届莽夫1
技术员
技术员
  • 最后登录2020-06-24
  • 发帖数85
  • 金币339枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
12楼#
发布于:2020-04-21 23:44
一届莽夫1:dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_open_window (20, 500, 512, 512, 'black',...
回到原帖
大神,你看我这个从效率上还有没有优化空间
卞卞byg
初学者
初学者
  • 最后登录2020-07-03
  • 发帖数100
  • 金币88枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
13楼#
发布于:2020-06-30 12:03
学习一下大神的思路。。。。
游客

返回顶部
支付

欢迎打赏,请选择打赏金额

  • 1元
  • 6元
  • 10元
  • 66元
  • 100元

支付即代表同意《本站支付协议》 有疑问请联系客服