0
0
Computer-visionHow-ToBeginner ยท 3 min read

How to Use Template Matching in OpenCV for Computer Vision

Use OpenCV's cv2.matchTemplate function to slide a template image over a larger image and find matching areas. The function returns a result map showing similarity scores, which you can analyze with cv2.minMaxLoc to locate the best match.
๐Ÿ“

Syntax

The main function for template matching in OpenCV is cv2.matchTemplate. It takes the source image, the template image, and a matching method as inputs. The output is a result matrix showing how well the template matches at each position.

Key parts:

  • image: The larger image where you want to find the template.
  • template: The smaller image you want to find inside the larger image.
  • method: The matching method, such as cv2.TM_CCOEFF_NORMED, which defines how similarity is measured.

After getting the result, use cv2.minMaxLoc to find the best match location.

python
result = cv2.matchTemplate(image, template, method)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
๐Ÿ’ป

Example

This example loads a main image and a template image, performs template matching using the normalized correlation coefficient method, and draws a rectangle around the best match found.

python
import cv2

# Load the main image and template in grayscale
image = cv2.imread('main_image.jpg', cv2.IMREAD_GRAYSCALE)
template = cv2.imread('template.jpg', cv2.IMREAD_GRAYSCALE)

# Get template width and height
w, h = template.shape[::-1]

# Perform template matching
result = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)

# Find the best match location
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)

# Draw rectangle on the best match
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(image, top_left, bottom_right, 255, 2)

# Show the result
cv2.imshow('Matched Result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Output
A window opens showing the main image with a white rectangle around the matched template area.
โš ๏ธ

Common Pitfalls

  • Wrong color format: Template and image must be in the same color space (both grayscale or both color).
  • Template larger than image: Template must be smaller than the source image.
  • Choosing the wrong method: Different methods interpret match scores differently; for example, some look for minimum values, others for maximum.
  • Ignoring scale and rotation: Template matching works best when the template and target have the same scale and orientation.
python
import cv2

# Wrong: template is color, image is grayscale
image = cv2.imread('main_image.jpg', cv2.IMREAD_GRAYSCALE)
template = cv2.imread('template.jpg')  # color by default

# This will cause incorrect matching
result = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)

# Correct: convert template to grayscale
template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
result = cv2.matchTemplate(image, template_gray, cv2.TM_CCOEFF_NORMED)
๐Ÿ“Š

Quick Reference

Tips for effective template matching:

  • Use grayscale images for faster and simpler matching.
  • Choose cv2.TM_CCOEFF_NORMED for normalized correlation matching.
  • Check minMaxLoc results carefully: some methods use max values, others min.
  • Resize templates if scale differs between template and target.
  • Template matching is sensitive to rotation and scale changes.
โœ…

Key Takeaways

Use cv2.matchTemplate with a proper method to find template matches in images.
Always ensure template and source images have the same color format and template is smaller.
Use cv2.minMaxLoc to locate the best match position from the result matrix.
Template matching is sensitive to scale and rotation differences between images.
Normalized methods like TM_CCOEFF_NORMED provide reliable matching scores.