Как найти сходство изображения на текстовом изображении в python - PullRequest
1 голос
/ 26 марта 2020

Я изучаю opencv и работаю над некоторыми тестовыми примерами для исследования, но проблема в том, что я получаю сходство изображения, включая черную область изображения. Моя цель - проверить сходство изображений и поместить каждую букву в одну и ту же папку (например, все изображения с буквой «А» должны находиться в одной папке, а все изображения с буквой «В» должны находиться в одной папке). цель я нахожу изображение сходства. проблема в черной области на моих изображениях.

это изображения, которые у меня есть

enter image description here enter image description here

теперь я хочу найти сходство между этими изображениями и разместить их соответственно

проблема в моем коде состоит в том, что все изображения имеют сходство более 0,90, что не должно быть возможным для всех изображений

это мой код

def get_similarity(img_1, img_2):
    pix1 = img_1.convert('L').load()
    pix2 = img_2.convert('L').load()
    match_count = 0
    pix1_white_count = 0
    pix2_white_count = 0

    for y in range(0, img_1.height):
        for x in range(0, img_1.width):
            if pix1[x, y] == pix2[x, y] and pix2[x, y] == 255:
                match_count += 1
            if pix2[x, y] == 255:
                pix2_white_count += 1
            if pix1[x, y] == 255:
                pix1_white_count += 1

    # no of pixels have more than 10% variation
    if float(pix1_white_count - pix2_white_count) / float(pix1_white_count + pix2_white_count) >= 1.5:
        return 0
    return float(match_count)/float(pix2_white_count)

Необходимо найти сходство только по белой области изображения или вы можете сказать между текстом

al go здесь я работаю над этим, подсчитывает белые пиксели на обоих изображениях и затем находит изменение соответственно

, но это дает индекс вне диапазона в этой строке

  if pix1[x, y] == pix2[x, y] and pix2[x, y] == 255:

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Соглашение в Numpy гласит, что сначала указывается координата y, затем x. Итак, вам нужно:

pix1[y,x]
0 голосов
/ 26 марта 2020

Если вам нужно только сходство белого региона, используйте моменты . При этом используется интенсивность пикселей, поэтому ваше изображение будет игнорировать черные пиксели (интенсивность = 0.) и использовать белые пиксели (интенсивность = 1.)

. Похоже, этот урок может помочь объясните, как их можно использовать. Фактически, использование моментов Ху, реализованных в функции matchShapes () OpenCV, даст хорошее представление о сходстве изображений, поэтому вы можете использовать эту функцию вместо своего примера.

...