Template Matching
จาก Morange Wiki
เนื้อหา
Template Matching
วัตถุประสงค์
- ในบทนี้ จะเรียนรู้เกี่ยวกับ
- การหาวัตถุในรูปภาพโดยใช้ เทมเพจแมซชิง
- ทดลองการใช้งานฟังก์ชั่นนี้โดยคำสั่ง : cv2.matchTemplate(), cv2.minMaxLoc()
ทฤษฏี
- โดยการใช้ Template Matching นั้นคือฟังก์ชั่นการค้นหา และ ตรวจพบ ตำแหน่งของเทมเพจในรูปภาพใหญ่ๆ โดย OpenCV จะมีฟังก์ชั่น cv2.matchTemplate() มาช่วยในด้านนี้ โดยวิธีใช้งานง่ายๆนั้น คือ นำรูปภาพเข้ามาแล้วนำไป Compare ให้เข้ากับ Template และ Patch ภาพที่นำเข้ามาให้อยู่ใต้เทมเพจของภาพ โดยวิธีการเปรียบได้หลายวิธีการ โดยใน OpenCV นั้น จะทำการกลับภาพให้เป็นสีเท่ก่อน ซึ่งแต่ละพิกเซลนั้นมีเท่าไหร่ และการพบนั้นมีเท่าไหร่ เมื่อเทียบกับแม่แบบ
- หากภาพที่นำเข้ามานั้น มีขนาดเท่ากับ (WxH) และแม่แบบของขนาดรูปภาพนั้น (wxh) โดยจะมีค่าผลลัพธ์ที่จะสามารถนำไปใช้ต่อกับฟังก์ชั่น cv2.minMaxLoc() โดยจะใช้ฟังก์ชั่นนี้หาค่า maximum/minimum โดยจะเป็นมุมบนซ้ายของรูปสี่เหลี่ยมผืนผ้าและใช้ (w,h) แทน Width และ Height ของสี่เหลี่ยมผืนผ้า และนั้นคือภาพแม่แบบ
Template Matching in OpenCV
- ตอนนี้จะทดลองหาแม่แบบมาทดลองเขียน Code แบบง่ายๆ สำหรับการค้นหาวัตถุในรูปภาพกัน
Result
Template Matching with Multiple Objects
- ในส่วนของก่อนหน้านี้จะค้นหาภาพหน้า โดยตรวจจับแค่ 1 จุด แต่สำหรับการค้นหาแบบหลายๆจุดนั้นจะสามารถใช้ฟังก์ชั่น cv2.minMaxLoc() แต่จะไม่ให้ตำแหน่งทั้งหมดดังนั้นเราจะใช้การ thresholding โดยต่อไปนี้จะเป็นยกตัวอย่างแบบง่ายๆ
CODE Example
import cv2 import numpy as np from matplotlib import pyplot as plt img_rgb = cv2.imread('Calcedit.jpg') img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) template = cv2.imread('Calcedit_tem.jpg',0) w, h = template.shape[::-1] res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED) threshold = 0.8 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('res.png',img_rgb)
Result
มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย