【问题标题】:How to find image similarity on textual image in python如何在python中查找文本图像的图像相似度
【发布时间】:2020-07-07 00:34:03
【问题描述】:

我正在学习 opencv 并研究一些测试用例进行研究,但问题是我得到的图像相似度包括图像的黑色区域。我的目的是检查图像相似性并将每个字母放在同一个文件夹中(例如,所有带有“A”字母的图像都应该在一个文件夹中,所有带有“B”字母的图像应该在同一个文件夹中)目的我发现图像相似性。问题是我的图像中的黑色区域。

这些是我拥有的图像

现在我想找到这些图像之间的相似性并相应地放置它们

我的代码中的问题是所有图像的相似度都超过 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)

只需要在图像的白色区域找到相似度,或者你可以说在文本之间

我正在研究的算法计算两个图像上的白色像素,然后找到相应的变化

但它给出的索引超出了这一行的范围

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

【问题讨论】:

    标签: python opencv image-processing python-imaging-library


    【解决方案1】:

    Numpy 中的约定是y 坐标在前,然后是x。所以你需要:

    pix1[y,x]
    

    【讨论】:

    • 这里的错误是索引超出范围现在错误是一样的
    【解决方案2】:

    如果您只想要白色区域的相似性,请使用moments。这使用像素强度,因此您的图像将忽略黑色像素(强度 = 0。)并使用白色像素(强度 = 1。)

    看起来this tutorial 可能有助于解释如何使用它们。事实上,使用 OpenCV 的 matchShapes() 函数中实现的 Hu 矩可以很好地了解图像相似度,因此您可以使用该函数代替您的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多