当前位置:网站首页>Halcon's practice based on shape template matching [2]

Halcon's practice based on shape template matching [2]

2022-07-05 07:56:00 BoomBiuBiu

Reprint here with code , The result is the same as that displayed by the matching assistant

* Image Acquisition 01: Code generated by Image Acquisition 01
* Turn on camera 
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0] Web Camera', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)

* Create a template , First show the pictures captured by the camera grab_image_start (AcqHandle, -1)
grab_image_async (Image, AcqHandle, -1)

* use ROI Draw a rectangle 
gen_rectangle2 (ROI_0, 291.907, 1059.07, rad(-90), 138.921, 92.1362)
* Cutout 
reduce_domain (Image, ROI_0, ImageReduced)

* The starting angle and ending angle are determined by 0-0 Change it to rad(0)-rad(360)
* Create a template 
create_scaled_shape_model (ImageReduced, 'auto',rad(0), rad(360), 'auto', 0.9, 1.1, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)

* Or the outline of the template 
get_shape_model_contours (Model, ModelID, 1)

* Set the color 
dev_set_color ('red')
* Set the line width 
dev_set_line_width (3)

while (true)
    grab_image_async (Image, AcqHandle, -1)
   * The starting angle and ending angle are changed to rad(0)-rad(360)
    * Find template 
    find_scaled_shape_model (Image, ModelID, rad(0), rad(360), 0.9, 1.1, 0.5, 10, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Scale, Score)

    * Judge whether there is a target in the area , Otherwise, an error will be reported 
    if(|Score|>0)
       
    * Target by target 
    for I := 0 to |Score| - 1 by 1
    * Unit matrix 
    hom_mat2d_identity (HomMat2DIdentity)
    * Translation matrix 
    hom_mat2d_translate (HomMat2DIdentity, Row[I], Column[I], HomMat2DTranslate)
    * Rotation matrix 
    hom_mat2d_rotate (HomMat2DTranslate, Angle[I], Row[I], Column[I], HomMat2DRotate)
    * Zoom matrix 
    hom_mat2d_scale (HomMat2DRotate, Scale[I], Scale[I], Row[I], Column[I], HomMat2DScale)
    
    * Show the outline 
    affine_trans_contour_xld (Model, ModelTrans, HomMat2DScale)
    dev_display (Image)
    dev_display (ModelTrans)
endfor
    
    endif
endwhile
* Turn off camera 
close_framegrabber (AcqHandle)

  result :

  notes : The affine transformation here can be replaced by other operators

    * Unit matrix 
    hom_mat2d_identity (HomMat2DIdentity)
    * Translation matrix 
    hom_mat2d_translate (HomMat2DIdentity, Row[I], Column[I], HomMat2DTranslate)
    * Rotation matrix 
    hom_mat2d_rotate (HomMat2DTranslate, Angle[I], Row[I], Column[I], HomMat2DRotate)
    * Zoom matrix 
    hom_mat2d_scale (HomMat2DRotate, Scale[I], Scale[I], Row[I], Column[I], HomMat2DScale)
    
    *-----------------------
    * The following operators can be used instead 
    vector_angle_to_rigid (0, 0, 0, Row[I], Column[I], Angle[I], HomMat2D1)
    * Zoom matrix 
    hom_mat2d_scale (HomMat2D1, Scale[I], Scale[I], Row[I], Column[I], HomMat2DScale)

result :

 

 

原网站

版权声明
本文为[BoomBiuBiu]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140548302439.html