【问题标题】:Font matching using image moments in OpenCV在 OpenCV 中使用图像矩进行字体匹配
【发布时间】:2019-10-29 15:39:36
【问题描述】:

我正在创建一个代码,它将告诉我两个字母彼此之间的相似程度。 为此,我决定使用 OpenCV 中的HuMoments 概念。

给出的是我拥有的图像

公司.jpg C0.jpg

A.jpg A.jpg

科罗拉多州.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 不匹配的另一种方法是什么?请注意,接近零的值意味着最接近的匹配。

【问题讨论】:

    标签: python opencv image-processing machine-learning computer-vision


    【解决方案1】:

    根据the documentationcv2.matchShapes 需要轮廓作为输入,而不是图像。

    This tutorial 有一个示例用法:

    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。)

    【讨论】:

      猜你喜欢
      • 2016-03-21
      • 2015-04-05
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      • 2012-02-12
      • 1970-01-01
      • 2021-01-22
      相关资源
      最近更新 更多