#numpy #opencv #image-processing
#numpy #opencv #обработка изображений
Вопрос:
При использовании функции matchTemplate в OpenCV я получаю сообщение об ошибке, что изображение шаблона больше исходного изображения. Как это преодолеть?
Код выглядит следующим образом:
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 amp;amp; _img.size().width <= _templ.size().width in function 'matchTemplate' site:stackoverflow.com
Комментарии:
1. «Как это преодолеть?» ….. Эм, использовать шаблон меньшего размера? Очевидно, что целевое изображение не может содержать шаблон, который больше его.
2. Шаблон — это то, что вы пытаетесь найти внутри увеличенного изображения. Вероятно, у вас просто есть шаблон и изображение в обратном порядке в вашем коде.
Ответ №1:
Вы можете избежать проблемы, не пытаясь сопоставить шаблон с изображением, если шаблон больше. Сравните размеры шаблона с размерами изображения и, в этом случае, return []
если они больше шаблона в любом измерении.