精华内容
下载资源
问答
  • Halcon19 模板匹配 灰度匹配工具 二维测量 印刷缺陷 检测 VS2017 进行VisionMix部分功能完善。包含功能: 多品牌相机驱动 模板匹配工具 灰度匹配工具 ...印刷缺陷检测 使用VS2017 Halcon19,提供源码 ...

    Halcon19 模板匹配 灰度匹配工具 二维测量 印刷缺陷 检测 VS2017

    进行VisionMix部分功能完善。包含功能:
    多品牌相机驱动
    模板匹配工具
    灰度匹配工具
    二维测量
    二维码扫描
    印刷缺陷检测
    使用VS2017 Halcon19,提供源码
    请添加图片描述

    展开全文
  • 使用模板匹配方法检测苹果缺陷 “”" import cv2 import matplotlib.pyplot as plt 读取待检测苹果图像 img = cv2.imread(“image/apple_normal.bmp”,0) 读取苹果缺陷模板图像 template = cv2.imread(...

    “”"
    使用模板匹配方法检测苹果缺陷
    “”"

    import cv2
    import matplotlib.pyplot as plt
    
     #读取待检测苹果图像
    img = cv2.imread("image/apple_normal.bmp",0)
    #读取苹果缺陷模板图像
    template = cv2.imread("image/apple_defect.bmp",0)
    #获得苹果缺陷模板图像的高度和宽度
    height,width = template.shape[::]
    
    #以方差为依据进行匹配
    rv = cv2.matchTemplate(img,template,cv2.TM_SQDIFF)
    #匹配函数的返回值
    minVal,maxVal,minLoc,maxLoc = cv2.minMaxLoc(rv)
    #查找最小值所在位置(值越小匹配度越好),topLeft为模板匹配位置的左上角坐标
    topLeft = minLoc
    #bottomRight为模板匹配位置的右下角坐标
    bottomRight = (topLeft[0] + width,topLeft[1] + height)
    #将苹果缺陷的模板匹配位置用矩形标注出来,255表示矩形为白色,1表示矩形宽度
    cv2.rectangle(img,topLeft,bottomRight,255,1)
    
    #模板匹配结果
    plt.subplot(),plt.imshow(img,cmap='gray')
    plt.title('Detected Point'),plt.xticks([]),plt.yticks([])
    plt.show()
    

    苹果缺陷模板图像apple_defect
    待检测苹果图像apple_normal
    模板匹配结果defect_result

    [版权声明:本文为博主原创文章,如要转载请在转载的文章后附上本人博客链接]https://editor.csdn.net/md?articleId=103892177

    展开全文
  • 经过深入研究图像分割、图像差影、模板匹配等模式识别理论与技术及微小轴承图像特征发现,要检测轴承的表面缺陷,需将轴承表面分割成两部分进行识别,轴承表面的均匀分布区域直接采用差影法,文字刻印区域采用模板...
  • 模板匹配与测量原图模板图检测图代码结果 原图 模板图 检测图 代码 * ------------------------------------------------------------------------------------------------ *此示例程序使用基于形状的匹配来对齐...

    模板匹配与测量

    原图

    模板图

    在这里插入图片描述

    检测图

    在这里插入图片描述

    代码

    * ------------------------------------------------------------------------------------------------
    *此示例程序使用基于形状的匹配来对齐度量的roi
    *工具,然后检查单个刀片。
    
    *该程序有两种运行模式:(1)全仿射变换
    *2)采用平移测度
    *修改下一行以在模式之间切换。
    
    *该参数控制是否使用translate_measure
    USING_TRANSLATE_MEASURE := 1
    * ------------------------------------------------------------------------------------------------
    
    dev_update_window ('off')
    read_image (ModelImage, 'razors1')
    get_image_pointer1 (ModelImage, Pointer, Type, Width, Height)
    dev_close_window ()
    dev_open_window (0, 0, Width, Height, 'white', WindowHandle)
    dev_set_part (0, 0, Height - 1, Width - 1)
    dev_display (ModelImage)
    *显示设置
    dev_set_color ('cyan')
    dev_set_draw ('margin')
    dev_set_line_width (2)
    stop ()
    * -------------------  start of the application  ----------------
    * 模板对象确定
    Row1 := 46
    Column1 := 57
    Row2 := 79
    Column2 := 94
    gen_rectangle1 (ROIPart1, Row1, Column1, Row2, Column2)
    gen_rectangle1 (ROIPart2, Row1 + 364, Column1 + 13, Row2 + 364, Column2 + 13)
    union2 (ROIPart1, ROIPart2, ModelROI)
    area_center (ModelROI, Area, CenterROIRow, CenterROIColumn)
    dev_display (ModelImage)
    dev_display (ModelROI)
    stop ()
    * 建模
    reduce_domain (ModelImage, ModelROI, ImageROI)
    create_shape_model (ImageROI, 4, 0, 0, 'auto', 'none', 'use_polarity', 30, 10, ModelID)
    inspect_shape_model (ImageROI, ShapeModelImage, ShapeModelRegion, 1, 30)
    *通过get_shape_model_contours可知建立的模型中心在(0,0)处
    get_shape_model_contours (ShapeModel, ModelID, 1)
    
    dev_clear_window ()
    dev_set_color ('blue')
    dev_display (ShapeModelRegion)
    stop ()
    * 测量ROI区域确定
    Rect1Row := 244
    Rect1Col := 73
    DistColRect1Rect2 := 17
    Rect2Row := Rect1Row
    Rect2Col := Rect1Col + DistColRect1Rect2
    RectPhi := rad(90)
    RectLength1 := 122
    RectLength2 := 2
    gen_rectangle2 (MeasureROI1, Rect1Row, Rect1Col, RectPhi, RectLength1, RectLength2)
    gen_rectangle2 (MeasureROI2, Rect2Row, Rect2Col, RectPhi, RectLength1, RectLength2)
    dev_display (ModelImage)
    dev_set_color ('yellow')
    dev_display (MeasureROI1)
    dev_display (MeasureROI2)
    ***************************************************
    **方法一:建模默认原点仿射变换时,平移模型区域中心到原点
    *通过变量OriginalClipRegion保留原始参数属性,'clip_region'是否裁剪
    * get_system ('clip_region', OriginalClipRegion)
    * set_system ('clip_region', 'false')
    *把建模的区域的中心移到0,0点,此时角度为0。以便后面的仿射变换
    * move_region (MeasureROI1, MeasureROI1Ref, -CenterROIRow, -CenterROIColumn)
    * move_region (MeasureROI2, MeasureROI2Ref, -CenterROIRow, -CenterROIColumn)
    * set_system ('clip_region', OriginalClipRegion)
    
    * DistRect1CenterRow := Rect1Row - CenterROIRow
    * DistRect1CenterCol := Rect1Col - CenterROIColumn
    * DistRect2CenterRow := Rect2Row - CenterROIRow
    * DistRect2CenterCol := Rect2Col - CenterROIColumn
    ****************************************************
    if (USING_TRANSLATE_MEASURE != 0)
       
        *测量对象生成一次,后续可以使用translate_measure继续使用
        gen_measure_rectangle2 (Rect1Row, Rect1Col, RectPhi, RectLength1, RectLength2, Width, Height, 'bilinear', MeasureHandle1)
        gen_measure_rectangle2 (Rect2Row, Rect2Col, RectPhi, RectLength1, RectLength2, Width, Height, 'bilinear', MeasureHandle2)
    endif
    stop ()
    * find_shape_model模板匹配
    read_image (SearchImage, 'razors2')
    dev_display (SearchImage)
    find_shape_model (SearchImage, ModelID, 0, 0, 0.8, 0, 0.5, 'least_squares', 0, 0.7, RowCheck, ColumnCheck, AngleCheck, Score)
    if (|Score| > 0)
        for i := 0 to |Score| - 1 by 1
            * 方法一:建模默认原点仿射变换
            *vector_angle_to_rigid (0, 0, 0, RowCheck[i], ColumnCheck[i], AngleCheck[i], MovementOfObject)
             * affine_trans_contour_xld (ShapeModel, ModelAtNewPosition, MovementOfObject)
             *方法二:建模区域不回原点,使用监视模型  
            vector_angle_to_rigid (CenterROIRow, CenterROIColumn, 0, RowCheck[i], ColumnCheck[i], AngleCheck[i], MovementOfObject)       
            affine_trans_region (ShapeModelRegion, ModelAtNewPosition, MovementOfObject, 'nearest_neighbor')
            dev_display (ModelAtNewPosition)
            
            * 方法二:建模区域不回原点 
            affine_trans_region (MeasureROI1, MeasureROI1AtNewPosition, MovementOfObject, 'constant')
            affine_trans_region (MeasureROI2, MeasureROI2AtNewPosition, MovementOfObject, 'constant')
            *方法一:建模默认原点仿射变换
           * affine_trans_region (MeasureROI1Ref, MeasureROI1AtNewPosition, MovementOfObject, 'constant')
           * affine_trans_region (MeasureROI2Ref, MeasureROI2AtNewPosition, MovementOfObject, 'constant')
            
            dev_display (MeasureROI1AtNewPosition)
            dev_display (MeasureROI2AtNewPosition)
            *方法一:建模默认原点仿射变换
    *         affine_trans_pixel (MovementOfObject, DistRect1CenterRow, DistRect1CenterCol, Rect1RowCheck, Rect1ColCheck)
    *         affine_trans_pixel (MovementOfObject, DistRect2CenterRow, DistRect2CenterCol, Rect2RowCheck, Rect2ColCheck)
            * 方法二:建模区域不回原点 
            affine_trans_pixel (MovementOfObject, Rect1Row, Rect1Col, Rect1RowCheck, Rect1ColCheck)
            affine_trans_pixel (MovementOfObject, Rect2Row, Rect2Col, Rect2RowCheck, Rect2ColCheck)
            
            
            if (USING_TRANSLATE_MEASURE != 0)
                * -> translate the already created measure objects
                *前面已经生成了测量对象,直接转换测量
                translate_measure (MeasureHandle1, Rect1RowCheck, Rect1ColCheck)
                translate_measure (MeasureHandle2, Rect2RowCheck, Rect2ColCheck)
                measure_pairs (SearchImage, MeasureHandle1, 2, 25, 'negative', 'all', RowEdge11, ColEdge11, Amp11, RowEdge21, ColEdge21, Amp21, Width1, Distance1)
                measure_pairs (SearchImage, MeasureHandle2, 2, 25, 'negative', 'all', RowEdge12, ColEdge12, Amp12, RowEdge22, ColEdge22, Amp22, Width2, Distance2)
            else
                * -> create new measure objects and destroy them after the measurement
                *每次测量生成测量对象
                RectPhiCheck := RectPhi + AngleCheck[i]
                gen_measure_rectangle2 (Rect1RowCheck, Rect1ColCheck, RectPhiCheck, RectLength1, RectLength2, Width, Height, 'bilinear', MeasureHandle1)
                gen_measure_rectangle2 (Rect2RowCheck, Rect2ColCheck, RectPhiCheck, RectLength1, RectLength2, Width, Height, 'bilinear', MeasureHandle2)
                * step 5: perform the measurement
                measure_pairs (SearchImage, MeasureHandle1, 2, 25, 'negative', 'all', RowEdge11, ColEdge11, Amp11, RowEdge21, ColEdge21, Amp21, Width1, Distance1)
                measure_pairs (SearchImage, MeasureHandle2, 2, 25, 'negative', 'all', RowEdge12, ColEdge12, Amp12, RowEdge22, ColEdge22, Amp22, Width2, Distance2)
                close_measure (MeasureHandle1)
                close_measure (MeasureHandle2)
            endif
            * step 6: check for too short or missing teeth
            NumberTeeth1 := |Width1|
            NumberTeeth2 := |Width2|
            dev_set_color ('red')
            *判断测量的边缘对数量是否不到37
            if (NumberTeeth1 < 37)
                for j := 0 to NumberTeeth1 - 2 by 1
                    *如果边缘对宽度大于4,那么框选该部分并设置该部分区域在新窗口显示
                    if (Distance1[j] > 4.0)
                        RowFault := round(0.5 * (RowEdge11[j + 1] + RowEdge21[j]))
                        ColFault := round(0.5 * (ColEdge11[j + 1] + ColEdge21[j]))
                        disp_rectangle2 (WindowHandle, RowFault, ColFault, 0, 4, 4)
                        dev_open_window (0, Width + 20, 80, 80, 'black', WindowHandleZoom)
                        dev_set_part (RowFault - 10, ColFault - 10, RowFault + 10, ColFault + 10)
                        dev_display (SearchImage)
                        disp_rectangle2 (WindowHandleZoom, RowFault, ColFault, 0, 4, 4)
                        stop ()
                        dev_close_window ()
                        dev_set_part (0, 0, Height - 1, Width - 1)
                    endif
                endfor
            endif
            if (NumberTeeth2 < 37)
                for j := 0 to NumberTeeth2 - 2 by 1
                    if (Distance2[j] > 4.0)
                        RowFault := round(0.5 * (RowEdge12[j + 1] + RowEdge22[j]))
                        ColFault := round(0.5 * (ColEdge12[j + 1] + ColEdge22[j]))
                        disp_rectangle2 (WindowHandle, RowFault, ColFault, 0, 4, 4)
                        dev_open_window (0, Width + 20, 80, 80, 'black', WindowHandleZoom)
                        dev_set_part (RowFault - 10, ColFault - 10, RowFault + 10, ColFault + 10)
                        dev_display (SearchImage)
                        disp_rectangle2 (WindowHandleZoom, RowFault, ColFault, 0, 4, 4)
                        stop ()
                        dev_close_window ()
                        dev_set_part (0, 0, Height - 1, Width - 1)
                    endif
                endfor
            endif
            dev_set_color ('yellow')
            stop ()
        endfor
    endif
    * -------------------  end of the application  -----------------
    * clean up
    if (USING_TRANSLATE_MEASURE != 0)
        close_measure (MeasureHandle1)
        close_measure (MeasureHandle2)
    endif
    dev_update_window ('on')
    clear_shape_model (ModelID)
    dump_window (WindowHandle, 'png', '识别检测结果')
    

    结果

    在这里插入图片描述

    展开全文
  • 图象的检测,模板匹配

    2015-07-12 11:02:33
    图象的检测,模板匹配的各种方法:1. 投影法;2. 差影法;3. 模板匹配;
  • Halcon缺陷检测之(Blob+差分法&&模板匹配+差分法)

    千次阅读 多人点赞 2020-12-23 13:40:47
    一、缺陷检测概述   缺陷检测是机器视觉重要的应用方向之一,由于在制造产品的过程中,表面缺陷的产生往往是不可避免的,故机器视觉的缺陷检测有较大的市场需求。熟练掌握缺陷检测是视觉工程师的必要技能。   在...

    一、缺陷检测概述

      缺陷检测是机器视觉重要的应用方向之一,由于在制造产品的过程中,表面缺陷的产生往往是不可避免的,故机器视觉的缺陷检测有较大的市场需求。熟练掌握缺陷检测是视觉工程师的必要技能。
      在工业视觉检测当中,常见的工业视觉检测表面缺陷有划伤、划痕、辊印、凹坑、粗糙、波纹等外观缺陷,此外还有像一些非金属产品表面的夹杂、破损、污点,以及纸张表面的色差、压痕等。
      相比于人工检测,基于机器视觉的检测有如下优点:
    ①能24小时不间断工作
    ②检测速度快,准确率高
    ③检测精度高
    ④不受外界因素的干扰,检测结果稳定
    ⑤非接触性检测

    二、缺陷检测方法

    个人总结如下:
    ①基于颜色的Blob法+差分
    ②模板匹配+差分
    ③基于轮廓的边缘提取
    ④频域+空间结合
    ⑤机器学习的方法
    ⑥光度立体法

    三、模板匹配+差分法

    主要检测物品损坏,凸起,破洞,缺失等。先定位模板区域后,求得模板区域的坐标,创建物品的形状模板create_shape_model,注意把模板的旋转角度改为rad(0)和rad(360)。匹配模板find_shape_model时,由于物品的缺陷使形状有局部的改变,所以要把MinScore设置小一点,否则匹配不到模板。并求得匹配项的坐标。关键的一步,将模板区域仿射变换到匹配成功的区域。由于差集运算是在相同的区域内作用的,所以必须把模板区域转换到匹配项的区域。之后求差集,根据差集部分的面积判断该物品是否有缺陷。
    图片集链接:https://pan.baidu.com/s/1x1dCrW17GM0d7v9DZPpQZA
    提取码:df5u
    这是完整形状的模板:
    在这里插入图片描述
    目标检测204这三个字符可能出现的缺陷
    检测结果如下,蓝色区域代表的是缺陷:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    Halcon代码如下:

    *CSDN->三元荧
    *读入标准模板图片(图片名字为standard.bmp)
    read_image (Image, 'D:/halcon用到的照片/standard.bmp')
    *设置图像窗口
    get_image_size (Image, Width, Height)
    dev_close_window ()
    dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
    dev_display (Image)
    *选中模板区域
    gen_rectangle1 (ROI_0, 201, 244, 385, 526)
    reduce_domain (Image, ROI_0, ImageReduced)
    *选中模板区域数字
    threshold (ImageReduced, Regions, 106, 255)
    connection (Regions, ConnectedRegions)
    select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 163.12, 10000)
    union1 (SelectedRegions, RegionUnion)
    *求模板区域坐标
    area_center (RegionUnion, Areastandard, Rowstandard, Columnstandard)
    *扣取模板区域图像,创建模板需要的是图像,不是区域
    reduce_domain (ImageReduced, RegionUnion, ImageReduced1)
    *创建模板
    create_shape_model (ImageReduced1, 'auto', rad(0), rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
    *读入图像路径,循环遍历每个图像
    list_files ('D:/halcon用到的照片/204', ['files','follow_links'], ImageFiles)
    tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
    for Index := 0 to |ImageFiles| - 1 by 1
        read_image (Image, ImageFiles[Index])
        *模板匹配
        find_shape_model (Image, ModelID, 0, rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
         *判断匹配是否成功
        if (|Score| > 0)
            *搜寻当前图像匹配成功的区域并求它的坐标和角度
            dev_display_shape_matching_results (ModelID, 'red', Row, Column, Angle, 1, 1, 0)
            *将模板区域仿射变换到匹配成功的区域
            vector_angle_to_rigid (Rowstandard, Columnstandard, 0, Row, Column, Angle, HomMat2D)
            affine_trans_region (RegionUnion, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
            dev_display (Image)
           *blob方法提取当前图像的数字,并变成一个联通域
            threshold (Image, Regions1, 106, 255)
            connection (Regions1, ConnectedRegions1)
            select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 163.12, 10000) 
            union1 (SelectedRegions1, RegionUnion1)
            *仿射变换后的模板区域与当前区域求差集,即缺陷部分
            difference (RegionAffineTrans, RegionUnion1, RegionDifference)
           *开运算去除很小点的噪声
            opening_circle (RegionDifference, RegionOpening, 3)
           *求缺陷的面积
            area_center (RegionOpening, Area, Row1, Column1)
             *缺陷面积大于阈值,说明有缺陷
            if(Area>100)
                *设置缺陷区域的颜色
                dev_set_color ('blue')
                *显示缺陷区域
                dev_display (RegionOpening)
                *显示NG
                set_display_font (WindowHandle, 50, 'mono', 'true', 'false')
                disp_message (WindowHandle,'NG', 'window', 15, 40, 'yellow', 'false')
              *缺陷面积小于阈值,说明没缺陷
            else
                *显示OK
                set_display_font (WindowHandle, 50, 'mono', 'true', 'false')
                disp_message (WindowHandle,'OK', 'window', 15, 40, 'green', 'false')
            endif
      *没有匹配到模板,直接NG       
          else
              set_display_font (WindowHandle, 50, 'mono', 'true', 'false')
              disp_message (WindowHandle,'NG', 'window', 15, 40, 'yellow', 'false')
          endif
    endfor
    

    四、Blob+差分法

    Halcon官网自带挺多例子,这里以Blob分析的fin.hdev为例。
    算子binary_threshold(Image : Region : Method, LightDark : UsedThreshold)使用二进制阈值分割图像,主要看LightDark参数。如果LightDark=‘light’,所有灰度值大于或等于的像素都被选中;如果LightDark=‘dark’,则选择灰度值小于的所有像素。比如fin.hdev目的提取背景区域,而背景偏向白色,故LightDark设为’light’即将背景区域提取出来。
    完整区域的图像:
    在这里插入图片描述
    在这里插入图片描述

    * fin.hdev: Detection of a fin
    * 
    dev_update_window ('off')
    read_image (Fins, 'fin' + [1:3])
    get_image_size (Fins, Width, Height)
    dev_close_window ()
    dev_open_window (0, 0, Width[0], Height[0], 'black', WindowID)
    set_display_font (WindowID, 14, 'mono', 'true', 'false')
    for I := 1 to 3 by 1
        select_obj (Fins, Fin, I)
        dev_display (Fin)
        *使用二进制阈值分割图像,选中背景
        binary_threshold (Fin, Background, 'max_separability', 'light', UsedThreshold)
        dev_set_color ('blue')
        dev_set_draw ('margin')
        dev_set_line_width (4)
        dev_display (Background)
        disp_continue_message (WindowID, 'black', 'true')
        stop ()
        *膨胀背景区域,此时凸起会被覆盖
        closing_circle (Background, ClosedBackground, 250)
        dev_set_color ('green')
        dev_display (ClosedBackground)
        disp_continue_message (WindowID, 'black', 'true')
        stop ()
        *将膨胀后的背景区域与未膨胀的区域求差集,即缺陷区域
        difference (ClosedBackground, Background, RegionDifference)
        *去除小噪声
        opening_rectangle1 (RegionDifference, FinRegion, 5, 5)
        dev_display (Fin)
        dev_set_color ('red')
        dev_display (FinRegion)
        area_center (FinRegion, FinArea, Row, Column)
        if (I < 3)
            disp_continue_message (WindowID, 'black', 'true')
            stop ()
        endif
    endfor
    

    五、交集差集补集

    如图,画两个圆:
    在这里插入图片描述
    ①两个圆的交集,算子intersection,求相同部分:
    在这里插入图片描述
    ②两个圆的差集,算子difference,求不相同部分:
    红色圆-绿色圆:
    在这里插入图片描述
    绿色圆-红色圆:
    在这里插入图片描述
    ③补集求的是区域之外的区域,算子complement,求两个圆的补集:
    在这里插入图片描述

    点个赞,点个关注呀‎|•’-’•)و✧

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    本文链接:https://blog.csdn.net/weixin_45617323/article/details/111578347

    展开全文
  • 算法步骤:1、分别在模板图像与待检测图像中定位瓶口,并且去除干扰点。2、调整去除干扰后的瓶口图像的大小,使模板图像与待检测图像大小保持一致。3、用模板图像减去待检测图像,并进行联通域分析,获得面积最大的...
  • opencv的TemplateMatch模板匹配检测的简单实现
  • 2、匹配模板find_shape_model时,由于物品的缺陷使形状有局部的改变,所以要把MinScore设置小一点,否则匹配不到模板。并求得匹配项的坐标。 3、关键的一步,将模板区域仿射变换到匹配成功的区域。由于差集运算是在...
  • 因为pcl的点云模板匹配遇到了各种困难,暂时先用opencv的模板匹配函数做一个简单的焊缝识别,看看效果。此方法的缺陷就在于物体和相机位置必须固定,只允许微小位移,否则数据将失效。1什么是模板匹配模板匹配是一...
  • 该系统适用于多种O型密封件尺寸的电控运动定位检测,利用适合表面缺陷检测模板匹配方法对橡胶密封件表面细小缺陷进行检测识别,该方法与传统的人工检测方法相比,具有非接触、可在线、客观真实、自动化等优点,可...
  • 基于opencv模板匹配的目标检测方法

    千次阅读 2018-09-03 22:27:00
    因为pcl的点云模板匹配遇到了各种困难,暂时先用opencv的模板匹配函数做一个简单的焊缝识别,看看效果。此方法的缺陷就在于物体和相机位置必须固定,只允许微小位移,否则数据将失效。 1 什么是模板匹配模板匹配...
  • halcon 对于多目标的模板匹配 (基于形状的模板匹配方法) 通过该方法可对零件进行模板提取 进而对其进行模板匹配
  • opencv 模板匹配目标检测

    千次阅读 2014-05-03 20:46:30
     模板匹配函数cvMatchTemplate依次计算模板与待测图片的重叠区域的相似度,并将结果存入映射图像result当中,也就是说result图像中的每一个点的值代表了一次相似度比较结果。  2.result的尺寸大小。  如图...
  • 快速旋转匹配缺陷检测、目标定位、模板配准算法接口 分类: 图像处理与计算机视觉的应用项目 2009-09-12 12:46 15745人阅读 评论(5) 收藏 举报 算法产品 流水线上的产品、零件有缺损、漏印、装配...
  • 基本想法:红绿灯有三种状态,分别为红黄绿,分别截取三种不同状态下的灯区域作为模板,划定感兴趣区域,在感兴趣区域分别对三个模板进行模板匹配,取匹配度最高的模板作为当前灯的状态。缺陷:1需要事先保存模板,...
  • 基于FCM聚类和模板匹配的视频马赛克检测方法,梁志敏,李文生,马赛克是数字电视节目中常见的一种视频缺陷现象,会造成视频质量的下降,因此在视频序列中有效地定位并修复马赛克块变得越来越重
  • 对于常见的刹车片轮廓缺陷,使用HALCON机器视觉软件设计检测算法,创建匹配模板,利用基于形状的模板匹配算法实现对图像的快速对准,最后利用差影法对刹车片轮廓缺陷进行检测。实验表明:系统能够实现刹车片轮廓缺陷的...
  • 0023_缺陷检测(4)

    千次阅读 2018-10-14 22:41:16
    此示例缺陷检测使用的方法是:模板匹配定位 + 测量 大体思路如下: 1. 采集图像 2. 通过模板匹配定位找到参考线 3. 用测量矩形找液面的边 4. 计算边缘和参考线之间的距离 代码分析如下: * 读取图像 dev_...
  • 本文设计了一种基于视觉的螺纹钢表面缺陷检测方法.先利用仿射变换对图像中歪斜的螺纹钢进行校正,然后基于霍夫变换检测纵肋边缘直线位置的方法对螺纹钢正面、侧面图像进行区分.最后针对正面、侧面图像分别进行缺陷...
  • 视觉算法-芯片缺陷检测.zip
  • 然后, 根据模板匹配、形态学分析、频率统计将缺陷轮廓粗略勾画出来;最后, 使用Delaunay三角剖分技术实现端面缺陷区域的精确勾画。实验结果表明, 该方法对隐藏于杂乱背景下的缺陷检测具有较高的识别率, 重复精度可达...
  • 缺陷检测——差分+定位 1. 简单的差分 ...2. 模板匹配定位+差分 案例1:印刷质量缺陷检测(standard) 案例2:检测工件孔洞毛刺缺陷 - 局部变形(direct) 3. 拓展一下 1. 卡尺+差分 2. 喷涂获得图像
  • 28-模板匹配

    2020-02-14 19:48:51
    文章目录模板匹配(Template Match)模板匹配(Template Match)模板匹配算法OpenCV中提供了6种常见的匹配算法:对应的宏定义相关APICode效果 模板匹配(Template Match) 1、模板匹配概念; 2、API; 3、Code; 模板匹配...
  • 针对LCD显示缺陷检测的重要性以及人工检测速度慢、漏检率高的弊端,提出了一种基于图像形状匹配的LCD显示缺陷自动光学检测方法。该方法的基本原理是:待测图像与标准图像形状配准后建立缺陷模型,利用灰度平均模板与...
  • 然后采用阈值分割检测溢胶、环氧面气孔气泡缺陷,采用模板匹配检测字符、外壳破损缺陷;最后通过Blob分析,提取缺陷特征,设定阈值参数,以满足不同标准的检测要求。根据样机实验结果显示,检测系统大大提高了检测...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,274
精华内容 2,909
关键字:

缺陷检测模板匹配