cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
时间: 2023-09-21 21:08:10 浏览: 195
这是一个 OpenCV 中的模板匹配函数,用于在图像中搜索模板图像的位置。它采用三个参数:原始图像、模板图像和匹配方法。其中,cv2.TM_CCOEFF_NORMED 是其中一种匹配方法,它基于归一化的互相关系数(Normalized Cross Correlation Coefficient)来计算匹配程度。返回值是一个浮点型的数组,表示模板图像在原始图像中的匹配程度。
相关问题
img.find_template
您好!对于在图像中查找模板,您可以使用 OpenCV 库中的模板匹配功能。具体的函数是 `cv2.matchTemplate()`。下面是一个示例代码,展示了如何在图像中查找模板:
```python
import cv2
import numpy as np
# 读取图像和模板
img = cv2.imread('image.png', 0)
template = cv2.imread('template.png', 0)
# 获取模板的高度和宽度
h, w = template.shape
# 进行模板匹配
res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
# 设置阈值
threshold = 0.8
# 找到匹配结果大于阈值的位置
loc = np.where(res >= threshold)
# 在图像上标记匹配的位置
for pt in zip(*loc[::-1]):
cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (0, 255, 0), 2)
# 显示结果
cv2.imshow('Result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
请确保将 `image.png` 和 `template.png` 替换为您自己的图像和模板文件路径。这个示例代码会在原始图像中找到与模板匹配的位置,并在匹配位置上绘制矩形框。
希望这可以帮助到您!如果您有任何其他问题,请随时提问。
import cv2 import numpy as np import pyautogui import tkinter as tk from PIL import ImageTk, Image class WindowDetector: def __init__(self, template_path): self.template = cv2.imread(template_path, 0) self.w, self.h = self.template.shape[::-1] def detect(self): screenshot = pyautogui.screenshot() screenshot = np.array(screenshot) screenshot = cv2.cvtColor(screenshot, cv2.COLOR_BGR2GRAY) res = cv2.matchTemplate(screenshot, self.template, cv2.TM_CCOEFF_NORMED) threshold = 0.8 loc = np.where(res >= threshold) for pt in zip(*loc[::-1]): cv2.rectangle(screenshot, pt, (pt[0] + self.w, pt[1] + self.h), (0, 0, 255), 2) return screenshot class App: def __init__(self, template_path): self.window_detector = WindowDetector(template_path) self.root = tk.Tk() self.root.title("Window Detector") self.root.geometry("800x600") self.canvas = tk.Canvas(self.root, width=800, height=600) self.canvas.pack() self.template = ImageTk.PhotoImage(Image.open(template_path)) tk.Button(self.root, text="Detect", command=self.detect_window).pack() tk.Label(self.root, image=self.template).pack() self.root.mainloop() def detect_window(self): screenshot = self.window_detector.detect() img = ImageTk.PhotoImage(Image.fromarray(screenshot)) self.canvas.create_image(0, 0, anchor=tk.NW, image=img) self.root.update_idletasks() if __name__ == "__main__": app = App("template.png")
这段代码是用来检测屏幕上是否存在一个特定的窗口,它首先读取一个模板图像,然后使用pyautogui库截取屏幕图像。接着,它使用OpenCV中的模板匹配算法来在屏幕截图中寻找模板图像的匹配位置。如果匹配程度超过了设定的阈值,就会在屏幕截图中标出匹配的位置。最后,它使用tkinter库创建了一个GUI窗口,其中包含一个按钮和一个标签,用户可以点击按钮来检测屏幕上是否存在指定的窗口,并在标签中显示检测结果。
阅读全文