精华内容
下载资源
问答
  • 8、halcon基于形状模板匹配

    千次阅读 2020-02-27 09:47:50
    1、模板匹配基本原理 模板匹配:通俗讲就是,拿着模板去匹配,就是先制作一个模板,然后利用这个模板...常用匹配方式:ncc模板匹配、形状模板匹配和XLD模板匹配。 2、XLD模板创建和匹配 (1)、XLD模板创建 读...

    1、模板匹配基本原理

    模板匹配:通俗讲就是,拿着模板去匹配,就是先制作一个模板,然后利用这个模板去图像中寻找与模板相似的部分,并记录寻找到的位置。

    模板匹配分类:按照有无变形,分为刚性模板匹配与变形模板匹配,变形模板匹配比较复杂,工业上基本是基本使用的刚性模板匹配。

    常用匹配方式:ncc模板匹配、形状模板匹配和XLD模板匹配。

    模板匹配原理:模板匹配是通过搜索的方式进行匹配,比如最简单的匹配。举例:

       假设模板为:

           2     5

           1     6

       搜索对象为:

           1     5     9     8

           2     5     3     9

           7     2     2     5

           5     7     1     6

       当搜索完全重合时:

    |2-2|+|5-5|+|1-1|+|6-6|=0

     

    ncc模板匹配原理:模板图像减去模板图像的平均值后,再与图像减去图像的平均值后,求两个差值的乘积,再除以灰度方差。

    相当于零均值,对光照变化的敏感度变低。

    公式:

    形状模板匹配原理:模板创建后,会根据模板中的边缘等关系去图像中进行搜索,可以理解成提取模板中的灰度发生变化的那些点,然后再去图像中匹配,这样的效果是对于干扰比较稳定,匹配速度快,并且及时边缘发生部分遮挡,匹配效果依旧好。

    XLD模板匹配原理:XLD是亚像素轮廓,所谓XLD模板匹配,是直接利用灰度变化明显的地方进行XLD的提取,然后去图像中进行匹配。

    (工业设备上,更多使用XLD模板匹配,且更可靠、稳定)

     

    2、XLD模板创建和匹配

    (1)、XLD模板创建

    读取图片

    创建XLD模板(在模板上手动边缘轮廓,替代程序识别XLD轮廓)

    手动画矩形,作为模板XLD轮廓

    保存XLD模板

    在程序工程保存的文件夹下,可以看到保存的模板和XLD的hobj文件。

    (2)模板匹配

    读取要识别的图片

    读取保存的XLD模板和XLD轮廓区域文件

    将1.bmp图像中多个轮廓区域匹配出来

    匹配结果:


    程序完整工程代码下载链接:

    https://download.csdn.net/download/panjinliang066333/12194228

     

     

     

     

     

     

    展开全文
  • *---------------------------------------------------...*基于形状模板匹配 *---------------------------------------------------------------------------------------------------------------------- *【1】读取
    *----------------------------------------------------------------------------------------------------------------------
    *基于形状模板匹配
    *----------------------------------------------------------------------------------------------------------------------
    *1】读取文件中的数据
    open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'C:/Users/Public/Documents/MVTec/HALCON-19.11-Progress/examples/images/board/board.seq', '', 1, 2, AcqHandle)
    grab_image (Image, AcqHandle)
    get_image_pointer1 (Image, Pointer, Type, Width, Height)
    get_image_size (Image, Width1, Height1)
    
    *2】窗体显示
    rgb1_to_gray (Image, GrayImage)
    dev_close_window ()
    dev_open_window (0, 0, Width, Height, 'white', WindowHandle)
    dev_set_part (0, 0, Height -1, Width-1)
    dev_display (Image)
    dev_set_color ('yellow')
    dev_set_draw ('margin')
    dev_set_line_width (2)
    
    set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
    disp_continue_message (WindowHandle, 'black', 'true')
    
    *3】绘制ROI区域
    draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
    gen_rectangle1 (ROI, Row1, Column1, Row2, Column2)
    dev_display (ROI)
    
    *4】抠图
    reduce_domain (GrayImage, ROI, ImageReduced)
    
    *5】创建模板
    *5.1 查看形状模板轮廓 塔等级8 对比度30 
    inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 8, 30)
    dev_clear_window ()
    dev_set_color ('blue')
    dev_display (ModelRegions)
    area_center (ModelRegions, Area, Row, Column)
    count_obj (ModelRegions, Number)
    
    for i := 1 to Number by 1
        if (Area[i-1]>=15)
            NumLeves:=i        
        endif
    endfor
    *5.2根据实际筛选选择的塔等级来创建形状模板
    create_shape_model (ImageReduced, NumLeves, 0, rad(360), 'auto', 'none', 'use_polarity', 30, 10, ModelID)
    get_shape_model_contours (ModelContours, ModelID, 1)
    
    *6】查找模板
    for i := 1 to 20 by 1
        grab_image (Image, AcqHandle)
        find_shape_model (Image, ModelID, 0, rad(360), 0.7, 1, 0.5, 'least_squares', 0, 0.7, Row3, Column3, Angle, Score)
        if (|Score|==1)
            dev_set_color ('yellow')
            vector_angle_to_rigid (0, 0, 0, Row3, Column3, Angle, HomMat2D)
            affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2D)
            dev_display (Image)
            dev_display (ContoursAffineTrans)                
        endif
        if(i!=20)
            disp_continue_message (WindowHandle, 'black', 'true')
        endif
        stop ()
    endfor
    
    展开全文
  • 基于模板匹配定位对象,利用仿射变换对于测量框进行平移,实现对于目标区域的测量 ***这个例子显示如何使用形状匹配来定位对象,并利用获取检测对象的位置和角度搜索待检测区域。 ****这个例子利用IC上字符定位IC...

    模板生成图像

    划定模板区域以及测量框区域

    基于模板匹配定位对象,利用仿射变换对于测量框进行平移,实现对于目标区域的测量

    ***这个例子显示如何使用形状匹配来定位对象,并利用获取检测对象的位置和角度搜索待检测区域。
    ****这个例子利用IC上字符定位IC.基于检测对象的角度和位置(位姿)构造两个测量矩形,进而测定Ic针脚之间的距离,
    ****此外这个打光效果使得针脚的灰度值饱和为225,这使得针脚的表面宽度偏大从而缩小了针尖之间的距离。虽然所有的
    ***的图像采用同一个样品。
    dev_update_pc ('off')
    dev_update_window ('off')
    dev_update_var ('off')
    open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'default', 'board/board.seq', 'default', -1, 1, FGHandle)
    grab_image (Image, FGHandle)
    get_image_size (Image, Width, Height)
    dev_close_window ()
    dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
    dev_open_window (Height+70, 0, Width, 120, 'black', WindowHandleText)
    dev_set_window (WindowHandle)
    set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
    set_display_font (WindowHandleText, 16, 'mono', 'true', 'false')
    dev_set_color ('red')
    dev_display (Image)
    ***设置roi区域的大小,方便修改
    Row1 := 188
    Column1 := 182
    Row2 := 298
    Column2 := 412
    gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
    area_center (Rectangle, Area, Row, Column)
    Rect1Row := -102
    Rect1Col := 5
    Rect2Row := 107
    Rect2Col := 5
    RectPhi := 0
    RectLength1 := 170
    RectLength2 := 5
    
    ****注意此处的测量矩形中心坐标是参照模板区域表示的,以便于下一步对其进行变换
    gen_rectangle2 (Rectangle1, Row+Rect1Row, Column+Rect1Col, RectPhi, RectLength1, RectLength2)
    gen_rectangle2 (Rectangle2, Row+Rect2Row, Column+Rect2Col, RectPhi, RectLength1, RectLength2)
    reduce_domain (Image, Rectangle, ImageReduced)
    ***参数含义依次为 选取的模板图像、金字塔的水平、最小旋转角度、匹配对象的旋转角度范围、角度步长、模型产生的方式、匹配标准、
    ***模板的中对象与背景阈值对比以及模板的尺寸、在图像的中的最小对比度。
    create_shape_model (ImageReduced, 4, 0, rad(360), rad(1), 'none', 'use_polarity', 30, 10, ModelID)
    get_shape_model_contours (ShapeModel, ModelID, 1)
    hom_mat2d_identity (HomMat2DIdentity)
    hom_mat2d_translate (HomMat2DIdentity, Row, Column, HomMat2DTranslate)
    affine_trans_contour_xld (ShapeModel, ShapeModelTrans, HomMat2DTranslate)
    dev_display (Image)
    dev_set_color ('green')
    dev_display (ShapeModelTrans)
    dev_set_color ('blue')
    dev_set_draw ('margin')
    dev_set_line_width (3)
    dev_display (Rectangle1)
    dev_display (Rectangle2)
    dev_set_draw ('fill')
    dev_set_line_width (1)
    dev_set_color ('yellow')
    disp_message (WindowHandle, ['Press left button to start','and stop the demo'], 'image', 12, 12, 'black', 'true')
    get_mbutton (WindowHandle, Row3, Column3, Button1)
    wait_seconds (0.5)
    Button := 0
    while (Button # 1)
        dev_set_window (WindowHandle)
        dev_set_part (0, 0, Height-1, Width-1)
        grab_image (ImageCheck, FGHandle)
        dev_display (ImageCheck)
        ***count_second***计算从开始S1到S2中算子所用时间
        count_seconds (S1)
        ***模板搜索***
        find_shape_model (ImageCheck, ModelID, 0, rad(360), 0.7, 1, 0.5, 'least_squares', 4, 0.7, RowCheck, ColumnCheck, AngleCheck, Score)
        count_seconds (S2)
        dev_display (ImageCheck)
        ***显示找到的模板图像
        if (|Score| > 0)
            dev_set_color ('green')
            hom_mat2d_identity (HomMat2DIdentity)
            hom_mat2d_translate (HomMat2DIdentity, RowCheck, ColumnCheck, HomMat2DTranslate)
            hom_mat2d_rotate (HomMat2DTranslate, AngleCheck, RowCheck, ColumnCheck, HomMat2DRotate)
            affine_trans_contour_xld (ShapeModel, ShapeModelTrans, HomMat2DRotate)
            dev_display (ShapeModelTrans)
       ******利用仿射变换对于划定ROI区域做位置变换*****
            affine_trans_pixel (HomMat2DRotate, Rect1Row, Rect1Col, Rect1RowCheck, Rect1ColCheck)
            affine_trans_pixel (HomMat2DRotate, Rect2Row, Rect2Col, Rect2RowCheck, Rect2ColCheck)
            gen_rectangle2 (Rectangle1Check, Rect1RowCheck, Rect1ColCheck, AngleCheck, RectLength1, RectLength2)
            gen_rectangle2 (Rectangle2Check, Rect2RowCheck, Rect2ColCheck, AngleCheck, RectLength1, RectLength2)
            dev_set_color ('blue')
            dev_set_draw ('margin')
            dev_set_line_width (3)
            dev_display (Rectangle1Check)
            dev_display (Rectangle2Check)
            dev_set_draw ('fill')
            count_seconds (S3)
            gen_measure_rectangle2 (Rect1RowCheck, Rect1ColCheck, AngleCheck, RectLength1, RectLength2, Width, Height, 'bilinear', MeasureHandle1)
            gen_measure_rectangle2 (Rect2RowCheck, Rect2ColCheck, AngleCheck, RectLength1, RectLength2, Width, Height, 'bilinear', MeasureHandle2)
           
            measure_pairs (ImageCheck, MeasureHandle1, 2, 90, 'positive', 'all', RowEdgeFirst1, ColumnEdgeFirst1, AmplitudeFirst1, RowEdgeSecond1, ColumnEdgeSecond1, AmplitudeSecond1, IntraDistance1, InterDistance1)
            measure_pairs (ImageCheck, MeasureHandle2, 2, 90, 'positive', 'all', RowEdgeFirst2, ColumnEdgeFirst2, AmplitudeFirst2, RowEdgeSecond2, ColumnEdgeSecond2, AmplitudeSecond2, IntraDistance2, InterDistance2)
            close_measure (MeasureHandle1)
            close_measure (MeasureHandle2)
            count_seconds (S4)
            dev_set_color ('red')
            *****显示检测边缘
            
            disp_line (WindowHandle, RowEdgeFirst1-RectLength2*cos(AngleCheck), ColumnEdgeFirst1-RectLength2*sin(AngleCheck), RowEdgeFirst1+RectLength2*cos(AngleCheck), ColumnEdgeFirst1+RectLength2*sin(AngleCheck))
            disp_line (WindowHandle, RowEdgeSecond1-RectLength2*cos(AngleCheck), ColumnEdgeSecond1-RectLength2*sin(AngleCheck), RowEdgeSecond1+RectLength2*cos(AngleCheck), ColumnEdgeSecond1+RectLength2*sin(AngleCheck))
            disp_line (WindowHandle, RowEdgeFirst2-RectLength2*cos(AngleCheck), ColumnEdgeFirst2-RectLength2*sin(AngleCheck), RowEdgeFirst2+RectLength2*cos(AngleCheck), ColumnEdgeFirst2+RectLength2*sin(AngleCheck))
            disp_line (WindowHandle, RowEdgeSecond2-RectLength2*cos(AngleCheck), ColumnEdgeSecond2-RectLength2*sin(AngleCheck), RowEdgeSecond2+RectLength2*cos(AngleCheck), ColumnEdgeSecond2+RectLength2*sin(AngleCheck))
            dev_set_line_width (1)
            NumLeads := |IntraDistance1|+|IntraDistance2|
            MinDistance := min([InterDistance1,InterDistance2])
            dev_set_window (WindowHandleText)
            dev_set_part (0, 0, 119, Width-1)
            dev_clear_window ()
            disp_message (WindowHandleText, 'Matching: Time: '+((S2-S1)*1000)$'5.2f'+'ms , Score: '+Score$'7.5f', 'image', 20, 20, 'green', 'false')
            disp_message (WindowHandleText, 'Measure:  Time: '+((S4-S3)*1000)$'5.2f'+' ms, Num. leads: '+(NumLeads)$'2d', 'image', 50, 20, 'red', 'false')
            disp_message (WindowHandleText, '          Min. lead dist: '+MinDistance$'6.3f', 'image', 80, 20, 'red', 'false')
        endif
        dev_error_var (Error, 1)
        dev_set_check ('~give_error')
        get_mposition (WindowHandle, R, C, Button)
        dev_error_var (Error, 0)
        dev_set_check ('give_error')
        if (Error#H_MSG_TRUE)
            Button := 0
        endif
    endwhile
    dev_set_window (WindowHandleText)
    dev_close_window ()
    clear_shape_model (ModelID)
    close_framegrabber (FGHandle)


     

    展开全文
  • HALCON基于形状模板匹配

    千次阅读 2017-11-17 19:26:37
    HALCON基于形状模板匹配
    一、匹配流程
    就是:创建模板和匹配模板,其中:
    创建模板:
    通过BLOB分析处理图像创建ROI,或读取ROI拿到模板图像。再通过相关参数创建模板匹配原型。
    匹配模板:
    使用匹配原型进行相应变换,在需要匹配的图像上找和模板一样的位置及相似的分数
    二、通过XLD创建AOI
    gen_region_contour_xld
    gen_region_polygon_xld
    修正函数
    erosion_*  侵蚀,减小ROI
    dilation_*  膨胀,扩大ROI
    shape_trans  拟合边缘,形状转换
    boundary  获取轮廓,像素级边界
    move_region 平移
    组合
    Intersection 交集
    Difference 差集
    Union2  并集
    三、生成模板
    create_shape_model( 
    Template , // 模板图像 
    NumLevels,  // 图像金字塔,层数越高,像素越少
    AngleStart,  // 起始角度 
    AngleExtent,  // 角度范围 
    AngleStep,  // 角度步长 
    Optimization,  // 优化算法,none不减少像素,point_reduction_low大约一半点,point_reduction_medium 大约1/3,point_reduction_high大约1/4
    Metric,   // 极性,如果图像有光线的变化,需要调整这个参数,但由于匹配的
    极性模式: use_polarity 生成的模板就一个目标
    极性模式: ignore_global_polarity 生成的模板有两个目标,一个是原图另一个是灰度值取反,黑的变白,白的变黑
    极性模式: ignore_local_polarity 生成的模板有三个目标,除上面两个还有一个是灰度值渐变
    Contrast,  // 对比度  (越大边缘越少,越小边缘越多)
    MinContrast, // 最小对比度 
    ModelID // 模板ID  )
    以上参数可以通过Matching助手来设置的具体效果
    相关算子介绍
    create_shape_model//生成的匹配图像有移动和旋转
    create_scaled_shape_model//除了移动和旋转还有放大缩小
    create_aniso_shape_model//除了移动和旋转还有放大缩小,但这个的放大缩小是可以控制X轴Y轴放大缩小
    以下为这三个算子的参数差异
    create_aniso_shape_model  (Template : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleRMin, ScaleRMax, ScaleRStep, ScaleCMin, ScaleCMax, ScaleCStep, Optimization, Metric, Contrast, MinContrast : ModelID)
    create_scaled_shape_model (Template : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep,                                      Optimization, Metric, Contrast, MinContrast : ModelID)
    create_shape_model        (Template : : NumLevels, AngleStart, AngleExtent, AngleStep,                                                                     Optimization, Metric, Contrast, MinContrast : ModelID)
    获取模板的参数
    determine_shape_model_params
    通过像素轮廓可以直接创建模板
    create_shape_model_xld
    create_scaled_shape_model_xld
    create_aniso_shape_model_xld
    四、模板匹配算子(find_scaled_shape_models:匹配多个模板)
    find_scaled_shape_model(
    Image,查找的图像
    ModelID, 生成的模板参数
    AngleStart, 匹配最小角度
    AngleExtent, 匹配最大角度(一起就是匹配角度范围)
    ScaleMin, 最小放大倍数
    ScaleMax, 最大放大倍数
    MinScore, 放大倍数步长
    NumMatches, 匹配个数,0则自动选择,100则最多匹配100个
    MaxOverlap, 要找到模型实例的最大重叠
    SubPixel, 亚像素精度
    NumLevels, 图像金字塔
    Greediness,贪婪系数
    Row, 中心点(X)
    Column, 中心点(Y)
    Angle, 角度
    Scale, 放大倍数
    Score)匹配的分数
    五、释放资源
    clear_shape_model (ModelID)
    以下为示例代码:

    open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'gray', -1, 'false', 'default', 'XXX', 0, -1, AcqHandle)
    grab_image (Image, AcqHandle)
    *一、画矩形,选择即将拿来做模板的区域
    draw_rectangle2 (3600, Row, Column, Phi, Length1, Length2)
    gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
    reduce_domain (Image, Rectangle, ImageReduced)
    inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 5, 5)
    area_center (Rectangle, Area, Row3, Column3)
    *二、生成模板
    create_shape_model (ImageReduced, 5, 0, rad(360), 'auto', 'pregeneration', 'use_polarity', 5, 'auto', ModelID)
    get_shape_model_contours (ModelContours, ModelID, 1)
    while (true)
        grab_image (Image, AcqHandle)
        *三、对模板进行匹配(find_shape_models多个模板匹配)
        find_shape_model (Image, ModelID, 0, rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row1, Column1, Angle, Score)
        *四、找到后把模板的区域仿射到找到的区域(为了看效果)
        if(|Score| == 1)
            vector_angle_to_rigid (0, 0, 0, Row1, Column1, Angle, HomMat2D)
            affine_trans_contour_xld (ModelContours, ContoursAffinTrans, HomMat2D)
        endif
    endwhile
    *五、释放资源
    clear_shape_model (ModelID)
    close_framegrabber (AcqHandle)

    展开全文
  • 做了许多的练习和实验,并对基于HDevelop的形状匹配算法的参数优化进行了研究,写了一篇《基于HDevelop的形状匹配算法参数的优化研究》文章,总结了在形状匹配过程中哪些参数影响到模板的搜索和匹配,又如何来协...
  • Halcon形状模板匹配

    2020-06-08 11:53:29
    接下来可以对这个矩形建立模板,在建立模板之前,可以先对这个区域进行一些预处理; (3)创建模板,使用create_shape_model(): a. 金字塔的级数由Numlevels指定,值越大找到物体的时间越少...
  • Halcon模板匹配坐标转换关系详解预备知识仿射变换及其变换矩阵Halcon模板匹配过程举例坐标转换原理解析 预备知识 仿射变换及其变换矩阵 本小节参考文章:https://www.cnblogs.com/shine-lee/p/10950963.html 仿射...
  • HALCON基于形状匹配详解

    千次阅读 2019-05-06 13:43:51
    HALCON基于形状模板匹配详细说明 很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间。去年有过一段时间的集中学习,做了许多的练习和实验,并对基于HDevelop的形状匹配算法的参数优化...
  • Halcon形状模板匹配输出角度的转换(以EPSON机器人为例) 在进行基于形状的模板匹配时,find_shape_model算子会输出目标的像素坐标、匹配分值以及角度。其中,输出的角度值是弧度,需要通过tuple_deg算子将弧度...
  • halcon模板匹配里创建了多个模板ID,如何将这多个模板保存在同一个文件里方便下次直接打开调用?
  • Halcon-模板匹配基于形状+基于相关性基于形状模板匹配基于相关性的模板匹配 基于形状模板匹配 运行代码 read_image (Bd01, 'F:/2020spring/机器视觉/课件/lesson6videos模板匹配/Imgdata/bd-1.png')//图片...
  • 模板匹配后,获得仿射变换矩阵T,则对于ROI的分析有两种: 1.全局的,将T.inv()*Img_target得到目标图片全局还原后的图片,在利用Region_Template,进行后续计算; 2.局部的,将T*Region_Template再对区域进行还原...
  • 这一个利用模板匹配后定位识别Razor锯齿缺陷检测的例子 * ------------------------------------------------------------------------------------------------ * This example program uses shape-based ...
  • 该范例演示如何通过根据多个实例的均值图片创建模板,提高匹配时的匹配度。
  • halcon 对于多目标的模板匹配基于形状模板匹配方法) 通过该方法可对零件进行模板提取 进而对其进行模板匹配
  • 上篇文章主要介绍的是基于形状匹配的算子各个参数所具备的作用,这篇文章主要介绍下如何在halcon中去使用这些算子完成基于形状的情况下找到我们的目标,同样也适用于缩放的模板查找。 ...
  • halcon基于形状模板匹配
  • Halcon基于形状模板匹配

    千次阅读 2013-08-01 15:31:42
     HALCON提供的基于形状匹配的算法主要是针对感兴趣的小区域来建立模板,对整个图像建立模板也可以,但这样除非是对象在整个图像中所占比例很大,比如像视频会议中人体上半身这样的图像,我在后面的视频对象跟踪实验...
  • 上两篇讲完模板匹配的两种:基于灰度的匹配和基于相关性的匹配,这一篇介绍下基于形状的匹配。相较于前两种,基于形状的匹配使用率是最高的。所以我们着重介绍下形状匹配的各项参数。 一般是用到的算子如下: create...
  • read_image (Image, 'E:/Halcon_Learn/基于形状模板匹配/green-dot.png') *获取图像的宽高 get_image_size (Image, Width, Height) *以合适的尺寸打开图像 dev_open_window_fit_size (0, 0, Width, Height, -1, -1...
  • 基于形状模板匹配: 经过一系列的图像预处理之后,提取圆形对象,选取Index为1的圆形对象,自动进行模板形状的创建,随后对TextImage进行模板匹配查找,从而计算图像中的对象个数(针对大于半圆的圆形对象)。 ...
  • Halcon 基于形状的模版匹配处理步骤

    千次阅读 2015-03-09 10:08:27
    (转自基于HALCON模板匹配方法总结--蓝云杨的机器视觉之路   蓝云杨的机器视觉之路http://www.china-vision.net/blog/user1/8/index.html) Shape-Based matching的基本流程  HALCON提供的基于形状匹配...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 464
精华内容 185
关键字:

halcon基于形状的模板匹配