Ошибка OpenCV при использовании функции matchTemplate - PullRequest
0 голосов
/ 21 апреля 2019

При использовании функции 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 && _img.size().width <= _templ.size().width in function 'matchTemplate' site:stackoverflow.com

1 Ответ

0 голосов
/ 21 апреля 2019

Вы можете избежать этой проблемы, не пытаясь сопоставить шаблон с изображением, если шаблон больше.Сравните размеры шаблона с размерами изображения и, в этом случае, return [], если шаблон больше по любому измерению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...