使用函数 matchTemplate 的 OpenCV 错误
Posted
技术标签:
【中文标题】使用函数 matchTemplate 的 OpenCV 错误【英文标题】:OpenCV Error using function matchTemplate 【发布时间】:2019-04-21 16:26:21 【问题描述】:在 OpenCV 中使用 matchTemplate 函数时,我收到模板图像大于原始图像的错误。如何克服?
代码如下:
def imagecheck(name1):
os.chdir('/content/drive/My Drive/Mad Street Den/Images')
main_image = cv2.imread('image_name_100.jpg')
gray_image = cv2.cvtColor(main_image, cv2.COLOR_BGR2GRAY)
#open the template as gray scale image
os.chdir('/content/drive/My Drive/Mad Street Den/Crops')
template = cv2.imread(name1, 0)
width, height = template.shape[::-1] #get the width and height
#match the template using cv2.matchTemplate
match = cv2.matchTemplate(gray_image, template, cv2.TM_CCOEFF_NORMED)
threshold = 0.9
position = np.where(match >= threshold) #get the location of template in the image
for point in zip(*position[::-1]): #draw the rectangle around the matched template
cv2.rectangle(main_image, point, (point[0] + width, point[1] + height), (0, 204, 153), 2)
#result=[position[1][0],position[0][0],position[0][1],position[0][2]]
result=[]
if (all (position)):
result.append(int(position[1]))
result.append(int(position[0]))
result.append(int(position[1]+width))
result.append(int(position[0]+height))
return (result)
#cv2_imshow(main_image)
for i in range(0,273):
name1='image_name_'+str(i)+'.jpg'
result=imagecheck(name1)
print(name1, ' : ',result)
错误是
error: OpenCV(3.4.3) /io/opencv/modules/imgproc/src/templmatch.cpp:1107: error: (-215:Assertion failed) _img.size().height <= _templ.size().height && _img.size().width <= _templ.size().width in function 'matchTemplate' site:***.com
【问题讨论】:
“如何克服这个问题?” .....嗯,使用更小的模板?显然,目标图像不可能包含比它更大的模板。 模板是您试图在较大图像中找到的东西。您可能只是在代码中倒退了模板和图像。 【参考方案1】:如果模板较大,您可以通过不尝试将模板与图像匹配来避免此问题。将模板尺寸与图像尺寸进行比较,在这种情况下,如果它们的模板在任何尺寸上都较大,则为 return []
。
【讨论】:
以上是关于使用函数 matchTemplate 的 OpenCV 错误的主要内容,如果未能解决你的问题,请参考以下文章