二维测量:找线,带角度跟随(add_metrology_object_line_measure)

今天有个网友问到这个add_metrology_object_line_measure算子没有角度参数,怎么做roi跟随。

勇哥网站上搜索了一下,还真没有写过这样的贴子,因此制作了一个小例子,给有需要的朋友参考。


image.png

image.png


代码比较简单。

用了形态模板匹配来定位roi位置。第一张图用来定义了模板。

中间那几个变量 a,b,c,d,e,f,g,h是roi四个边的顶点。

那一部分代码实际上的作用是:

已知rectangle2的中心坐标与length1,length2,求出rectangle2的四个顶点坐标位置,这里用了三角函数来计算。

这部分知识请参考勇哥写的贴子《halcon中求rectangle2矩形的四个顶点坐标


dev_close_window()
file:=['F:/1112233.bmp','F:/2222.bmp']
mRow:=3050
mCol:=1856
mAng:=0



for Index1 := 0 to 1 by 1
    read_image(Image, file[Index1])
    dev_open_window_fit_image(Image, 0, 0, -1, -1, WindowHandle)
    get_image_size(Image, Width, Height)
    disp_obj(Image, WindowHandle)
    if(Index1=0)
        disp_rectangle2(WindowHandle, mRow,mCol, mAng, 700,1720)
        gen_rectangle2(Rectangle, mRow,mCol, mAng, 700, 1720)
        reduce_domain(Image, Rectangle, ImageReduced)
        create_shape_model(ImageReduced, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
        write_shape_model(ModelID, 'shape1.shm')
    endif
    read_shape_model('shape1.shm', ModelID1)
    
    find_shape_model(Image, ModelID1, -0.39, 0.79, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row1, Column1, Angle, Score)
    get_shape_model_contours(ModelContours, ModelID1, 1)
    vector_angle_to_rigid(0, 0, 0, Row1, Column1, Angle, HomMat2D)
    hom_mat2d_scale(HomMat2D,1,1, Column1, Row1, HomMat2DScale)
    affine_trans_contour_xld(ModelContours, ContoursAffineTrans, HomMat2DScale)
    disp_obj(ContoursAffineTrans, WindowHandle)
    ang:=deg(Angle)
    disp_circle(WindowHandle, Row1, Column1, 64)
    dev_set_color('blue')
      dev_set_draw('margin')
    len1:=500
    len2:=1120
    gen_rectangle2(Rectangle1, Row1, Column1, Angle, len1, len2)
    disp_obj(Rectangle1, WindowHandle)
    
    newRow:=Row1
    newCol:= Column1
    newAngle:= Angle
    
    hom_mat2d_identity(homMat2D)
    hom_mat2d_rotate(homMat2D,newAngle, Row1, Column1, homMat2D)
    hom_mat2d_translate(homMat2D, newRow, newCol, homMat2D)
    
  
    create_metrology_model(MetrologyHandle)
    set_metrology_model_image_size(MetrologyHandle, Width, Height)
   
    tuple_cos (newAngle, Cos)
    tuple_sin (newAngle, Sin)
    dev_set_color('red')
    a:= -len1*Cos - len2*Sin
    b := -len1*Sin + len2*Cos
    gen_cross_contour_xld(Cross1, newRow-b,  newCol+a, 56, newAngle)
    c := len1*Cos - len2*Sin
    d := len1*Sin + len2*Cos
    gen_cross_contour_xld(Cross2, newRow-d, newCol+c, 56, newAngle)
    e:= len1*Cos + len2*Sin
    f := len1*Sin - len2*Cos
    gen_cross_contour_xld(Cross3, newRow-f, newCol+e, 56, newAngle)
    g := -len1*Cos + len2*Sin
    h := -len1*Sin - len2*Cos
    disp_line(WindowHandle, newRow-h, newCol+g, newRow-b, newCol+a)
    
    beginx:=newRow-h
    beginy:= newCol+g
    endx:= newRow-b
    endy:=newCol+a

    add_metrology_object_line_measure(MetrologyHandle, beginx,beginy ,endx , endy, 20, 5, 1, 30, [], [], Index)
    set_metrology_object_param(MetrologyHandle,'all','measure_transition','all')
    set_metrology_object_param(MetrologyHandle,'all','measure_select','all')
    set_metrology_object_param(MetrologyHandle,'all','measure_threshold',30)
    set_metrology_object_param(MetrologyHandle,'all','measure_sigma',1)
    set_metrology_object_param(MetrologyHandle,'all','measure_length1',30)
    set_metrology_object_param(MetrologyHandle,'all','measure_length1',435)
    set_metrology_object_param(MetrologyHandle,'all','num_measures',50)
    set_metrology_object_param(MetrologyHandle,'all','min_score',0.4)
    apply_metrology_model(Image,MetrologyHandle)
    get_metrology_object_measures(Contours, MetrologyHandle, 'all', 'all', Row, Column)
    dev_set_color('green')
    dev_display(Contours)
    dev_set_color('red')
    radiusAry:=[]
    for i := 0 to |Row|-1 by 1
       radiusAry[i]:=14.0
    endfor
    disp_circle(WindowHandle,Row, Column, radiusAry)
    clear_metrology_object(MetrologyHandle, 'all')
    clear_metrology_model(MetrologyHandle)
    stop()
endfor


#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。如果需要本贴图片源码等资源,请向勇哥索取。
  • 评论列表:
  •  访客
     发布于 2020-07-01 14:57:03  回复该评论
  • 你好,这个示例中用到的原图可以哪里下载呢,网站上挂的是压缩并且格式变换过的jpg文件且被上了水印了

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«   2020年8月   »
12
3456789
10111213141516
17181920212223
24252627282930
31
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
标签列表
搜索
最新留言
最近发表
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:

Powered By Z-BlogPHP 1.6.0 Valyria

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864