Как исправить функцию 'cv :: matchTemplate' - PullRequest
1 голос
/ 02 ноября 2019

Я хочу прочитать символы капчи как одну строку.

Это пример изображений, которые я хочу прочитать:

! https://ibb.co/t2h3SS5

КодЯ использую:

    match = cv2.matchTemplate(img_symbol, image, cv2.TM_CCOEFF_NORMED)
    if len(match):
        _, quality, _, location = cv2.minMaxLoc(match)
        if quality > 0.8:
            result.append({'x': location[0], 'symbol': ntpath.basename(symbol).replace('.png', '')})
result = sorted(result, key=lambda k: k['x'])
return ''.join([x['symbol'] for x in result])

У меня есть эти ошибки:


Ошибка Traceback (последний последний вызов) в 37 38 для img в ИЗОБРАЖЕНИЯХ: ---> 39print ('{} -> {}'. format (img, думаю, капча (img)))

в угадайте (изображение) 27 img_symbol = cv2.imread (символ) 28 ---> 29 match = cv2.matchTemplate (img_symbol, image, cv2.TM_CCOEFF_NORMED) 30, если len (соответствует): 31 _, качество, _, location = cv2.minMaxLoc (соответствует)

ошибка: OpenCV (4.1.2) .. \modules \ imgproc \ src \ templmatch.cpp: 1104: ошибка: (-215: утверждение не выполнено) (глубина == CV_8U || глубина == CV_32F) && type == _templ.type () && _img.dims () <=2 в функции 'cv :: matchTemplate' </p>

1 Ответ

0 голосов
/ 02 ноября 2019

Сообщения об ошибках OpenCV могут быть немного загадочными. Вот значение каждой части сообщения об ошибке:

  • depth == CV_8U: функция ожидала 8-битное одноканальное изображение (одно значение uint8 на пиксель, например, в оттенках серого, но не RGB, который имеет 3 значенияна пиксель)
  • depth == CV_32F: функция ожидает 32-битное одноканальное изображение (одно значение с плавающей запятой на пиксель)
  • type == _templ.type(): оба входных изображения должны иметь одинаковый тип (оба CV_8Uили CV_32F)
  • _img.dims() <= 2: изображение должно иметь максимум 2 измерения (без многоканального изображения, например RGB)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...