OpenCV和Python中多个源图像的模板匹配
下面是Python和OpenCV中使用模板匹配进行图像检测的代码OpenCV和Python中多个源图像的模板匹配,python,image,opencv,Python,Image,Opencv,下面是Python和OpenCV中使用模板匹配进行图像检测的代码 import numpy as np import cv2 image = cv2.imread('photo.jpg') template = cv2.imread('template.jpg') # resize images image = cv2.resize(image, (0,0), fx=0.5, fy=0.5) template = cv2.resize(template, (0,0), fx=0.5, f
import numpy as np
import cv2
image = cv2.imread('photo.jpg')
template = cv2.imread('template.jpg')
# resize images
image = cv2.resize(image, (0,0), fx=0.5, fy=0.5)
template = cv2.resize(template, (0,0), fx=0.5, fy=0.5)
# Convert to grayscale
imageGray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
templateGray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
# Find template
result = cv2.matchTemplate(imageGray,templateGray, cv2.TM_CCOEFF)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
top_left = max_loc
h,w = templateGray.shape
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(image,top_left, bottom_right,(0,0,255),4)
# Show result
cv2.imshow("Template", template)
cv2.imshow("Result", image)
cv2.moveWindow("Template", 10, 50);
cv2.moveWindow("Result", 150, 50);
cv2.waitKey(0)
我想知道如何使用多个源图像执行该程序?假设您指的是多个模板图像,下面是我尝试过的一些方法
import cv2
import numpy as np
import glob
#empty list to store template images
template_data=[]
#make a list of all template images from a directory
files1= glob.glob('your\\template images\\template*.png')
for myfile in files1:
image = cv2.imread(myfile,0)
template_data.append(image)
test_image=cv2.imread('you\\testimage\\testimage.png')
test_image= cv2.cvtColor(test_image, cv2.COLOR_BGR2GRAY)
#loop for matching
for tmp in template_data:
(tH, tW) = tmp.shape[:2]
cv2.imshow("Template", tmp)
cv2.waitKey(1000)
cv2.destroyAllWindows()
result = cv2.matchTemplate(test_image, tmp, cv2.TM_CCOEFF)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
top_left = max_loc
bottom_right = (top_left[0] + tW, top_left[1] + tH)
cv2.rectangle(test_image,top_left, bottom_right,255, 2)
cv2.imshow('Result',test_image)
cv2.waitKey(0)
假设你指的是多个模板图像,下面是我尝试过的一些东西
import cv2
import numpy as np
import glob
#empty list to store template images
template_data=[]
#make a list of all template images from a directory
files1= glob.glob('your\\template images\\template*.png')
for myfile in files1:
image = cv2.imread(myfile,0)
template_data.append(image)
test_image=cv2.imread('you\\testimage\\testimage.png')
test_image= cv2.cvtColor(test_image, cv2.COLOR_BGR2GRAY)
#loop for matching
for tmp in template_data:
(tH, tW) = tmp.shape[:2]
cv2.imshow("Template", tmp)
cv2.waitKey(1000)
cv2.destroyAllWindows()
result = cv2.matchTemplate(test_image, tmp, cv2.TM_CCOEFF)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
top_left = max_loc
bottom_right = (top_left[0] + tW, top_left[1] + tH)
cv2.rectangle(test_image,top_left, bottom_right,255, 2)
cv2.imshow('Result',test_image)
cv2.waitKey(0)
将图像加载到容器并循环?您的代码需要更好的格式。你的问题内容不需要使用引号,因为它不是引号。从你的要求来看,似乎你想让我们为你写一个for循环?还不清楚是将源作为模板还是将源作为与模板相比的图像。我已修复了代码格式。将图像加载到容器并循环?您的代码需要更好的格式。你的问题内容不需要使用引号,因为它不是引号。从你的要求来看,似乎你想让我们为你写一个for循环?还不清楚是否将源作为模板或源作为图像与模板进行比较。我已经修复了代码格式化。要考虑的是,虽然这很好,但它有一个开销,在整个源图像上再次匹配模板,每次您想得到另一个匹配时,而不是匹配一次,只查找和计算结果匹配。要考虑的是,虽然这很好,它有一个开销再次匹配模板在整个源图像,每次你想得到另一个匹配,而不是匹配一次,查找和计算结果匹配。