Сопоставление шрифтов с использованием моментов изображения в OpenCV - PullRequest
0 голосов
/ 15 июня 2019

Я создаю код, который скажет мне, насколько похожи две буквы друг на друга. Для этого я решил использовать концепцию HuMoments в OpenCV.

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

Co.jpg C0.jpg

A.jpg A.jpg

Colorado.jpg Colorado.jpg

Я читаю изображения, используя:

im5 = cv2.imread("images/C0.jpg",cv2.IMREAD_GRAYSCALE)
im7 = cv2.imread("images/Colorado.jpg",cv2.IMREAD_GRAYSCALE)
im9 = cv2.imread("images/A.jpg",cv2.IMREAD_GRAYSCALE)

Я использую атрибут cv2.matchShapes для соответствия:

m6 = cv2.matchShapes(im5, im7, cv2.CONTOURS_MATCH_I2,0)
m8 = cv2.matchShapes(im5, im9, cv2.CONTOURS_MATCH_I2,0)

Наконец я печатаю вывод:

print("C0.png and Colorado.png : {}".format(m6))
print("C0.png and A.jpg : {}".format(m8))

Здесь значение, близкое к нулю (0), означает идеальное совпадение

Мой вывод:

$ python3 shapeMatcher.py 
Shape Distances Between 
-------------------------
C0.png and Colorado.png : 0.10518804385516889
C0.png and A.jpg : 0.0034705987357361856

C0 и Colorado - несоответствия, которые отображаются правильно. Меня сбивает с толку то, как C0.jpg и A.jpg близки друг другу? Я что-то упустил, какой альтернативный способ получить несоответствие между C0 и A? Обратите внимание, что значение ближе к нулю означает наиболее близкое совпадение.

1 Ответ

1 голос
/ 15 июня 2019

В соответствии с документацией , cv2.matchShapes требуется вводить контуры, а не изображения.

В этом руководстве приведен пример использования:

import cv2
import numpy as np

img1 = cv2.imread('star.jpg',0)
img2 = cv2.imread('star2.jpg',0)

ret, thresh = cv2.threshold(img1, 127, 255,0)
ret, thresh2 = cv2.threshold(img2, 127, 255,0)
contours,hierarchy = cv2.findContours(thresh,2,1)
cnt1 = contours[0]
contours,hierarchy = cv2.findContours(thresh2,2,1)
cnt2 = contours[0]

ret = cv2.matchShapes(cnt1,cnt2,1,0.0)
print ret

(Обратите внимание, что синтаксис findContours изменен с OpenCV 2 на OpenCV 3.)

...