代码之家  ›  专栏  ›  技术社区  ›  KelvinS Karel Petranek

使用SciKit图像中的匹配模板检查模板是否存在

  •  0
  • KelvinS Karel Petranek  · 技术社区  · 6 年前

    match_template 方法从SciKit图像库中检查模板是否存在于图像中并获取其X和Y位置。我用的是 scikit-image template matching example

    我的代码如下:

    #!/usr/bin/env python
    # -*- encoding: utf-8 -*-
    
    import numpy as np
    from skimage import io
    from skimage.color import rgb2gray
    from skimage.feature import match_template
    
    
    def exists(image, template):
        """Perform a template match and returns the X and Y positions.
    
        Args:
            image (str): path to the full image.
            template (str): path to the template image.
    
        Returns:
            If there is a match, return the X and Y positions.
            If there is not match, return None.
        """
    
        image = io.imread(image, as_gray=True)
        template = io.imread(template, as_gray=True)
    
        result = match_template(image, template, pad_input=True)
    
        return np.unravel_index(np.argmax(result), result.shape)[::-1]
    
        # unreachable
        return None
    

    如何检查模板是否不存在并返回 None

    1 回复  |  直到 6 年前
        1
  •  1
  •   Juan    6 年前

    match_template 给你一个明确的答案,但关键是功能 退货

    Returns
    -------
    output : array
        Response image with correlation coefficients.
    

    output 在几个正的例子(包含模板,有不同数量的噪声)和几个负的例子(没有),并绘制两个分布来选择阈值。然后您可以添加:

    def exists(image, template, threshold):
        ...
        max_corr = np.max(result)
        if max_corr > threshold:
            return np.unravel_index(np.argmax(result), result.shape)[::-1]
        else:
            return None