首页 > 解决方案 > 如何在另一个图像中找到不同大小的图像(OpenCV Python)

问题描述

我正在尝试创建一个程序来识别图像('template.png')是否在另一个(template.png)中。

这是我到目前为止所拥有的:

import cv2
import numpy as np

methods = {1: cv2.TM_CCOEFF, 2: cv2.TM_CCOEFF_NORMED, 3: cv2.TM_CCORR,
            4: cv2.TM_CCORR_NORMED, 5: cv2.TM_SQDIFF, 6: cv2.TM_SQDIFF_NORMED}

for n, m in methods.items():
    img_rgb = cv2.imread('image.jpg')
    template = cv2.imread('template.png')
    w, h = template.shape[:-1]
    res = cv2.matchTemplate(img_rgb, template, m)
    threshold = .9
    loc = np.where(res >= threshold)
    for pt in zip(*loc[::-1]):
        cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)

    cv2.imwrite(f'{n}_result.png', img_rgb)

如果我截取“image.jpg”的一小部分并将其用作“template.png”,这目前有效,但是当“template.png”的大小不同时它不起作用。

template.png 文件可能以与其原始大小不同的大小出现在图像中。尽管图像大小,我如何检查图像是否包含在内?

编辑:有没有办法使用监督机器学习来重复选择“image.jpg”上的元素并让它慢慢地更好地理解它在寻找什么?

标签: pythonpython-3.xopencv

解决方案


推荐阅读