Выбор изображений внутри изображений - PullRequest
0 голосов
/ 16 июня 2020

У меня есть это изображение и Я хочу выбрать все карты в нем, включая имена, используя python.

Я пробовал использовать OpenCv

from cv2 import cv2
import numpy as np
import os

for image in os.listdir('assets'):
    print(image)
    img_rgb = cv2.imread(image)
    template = cv2.imread('assets/template/template.png')
    w, h = template.shape[:-1]
    res = cv2.matchTemplate(img_rgb, template, cv2.TM_CCOEFF_NORMED)
    threshold = .8
    loc = np.where(res >= threshold)
    for pt in zip(*loc[::-1]):  # Switch columns and rows
        cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)

    cv2.imwrite('result.png', img_rgb)
    break

Но я всегда получаю эту ошибку:

OpenCV (4.2.0) C: \ projects \ opencv-python \ opencv \ modules \ imgproc \ src \ templmatch. cpp: 1104 : error: (-215: Assertion failed) (depth == CV_8U || depth == CV_32F) && type == _templ.type () && _img.dims () <= 2 в функции 'cv :: matchTemplate </p>

Как мне это сделать? Пожалуйста, помогите

1 Ответ

1 голос
/ 16 июня 2020

cv2.matchTemplate вернет эту ошибку, если один из ее аргументов - NoneType. Другими словами, img_rgb - это ничего, скорее всего, потому, что в этом месте не было найдено изображение.

Вот как я воспроизвел вашу ошибку:

from cv2 import cv2
import numpy as np

img_rgb = cv2.imread('fjdlfkjdlkfjdlfksdad')  # or None
template = np.random.randint(0, 256, (100, 100, 3))
res = cv2.matchTemplate(img_rgb, template, cv2.TM_CCOEFF_NORMED)

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

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