Detectar si una imagen está contenida dentro de otra imagen mediante OpenCV en Python

Script en Python que detecta si la imagen está contenida dentro de otra

# Cargar OpenCV
import cv2
# Sirve para operar con cualquier dato numérico
import numpy as np

# Leer las imágenes que vamos a comparar
# Imagen sobre la que vamos a detectar si existe otra imagen
img_rgb = cv2.imread('Todo.jpg')
# Imagen que comprobamos si existe en la imagen Todo
template = cv2.imread('1.jpg')

# Tamaño de la imagen 1.jpg
w, h = template.shape[:-1]

# Función que sirve para detectar si una imagen está contenida en otra
res = cv2.matchTemplate(img_rgb, template, cv2.TM_CCOEFF_NORMED)

# Umbral admitido
threshold = .7

# Si está dentro del umbral, crear un cuadrado sobre la imagen contenida en la imagen Todo
loc = np.where(res >= threshold)
for pt in zip(*loc[::-1]):  #  Cambiar columnas y filas
    cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 0, 0), 1)

# Guardar el resultado
cv2.imwrite('result.png', img_rgb)

Imagen Todo.jpg

Imagen 1.jpg

Resultado.png


Otros resultados para umbrales más bajos

threshold = .5

threshold = .48

threshold = .4