Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中如何在文本图像上查找图像相似性_Python_Opencv_Image Processing_Python Imaging Library - Fatal编程技术网

python中如何在文本图像上查找图像相似性

python中如何在文本图像上查找图像相似性,python,opencv,image-processing,python-imaging-library,Python,Opencv,Image Processing,Python Imaging Library,我正在学习opencv,并在研究一些测试用例,但问题是我得到的图像相似性包括图像的黑色区域。我的目的是检查图像的相似性,并将每个字母放在同一文件夹中(例如,所有带有“A”字母的图像应放在一个文件夹中,所有带有“B”字母的图像应放在同一文件夹中)。为此,我查找图像的相似性。问题是我的图像中的黑色区域 这些是我的照片 现在我想找出这些图像之间的相似性,并相应地放置它们 我的代码中的问题是,所有图像的相似度都大于.90,这不可能适用于所有图像 if pix1[x, y] == pix2[x,

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

这些是我的照片

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

我的代码中的问题是,所有图像的相似度都大于.90,这不可能适用于所有图像

  if pix1[x, y] == pix2[x, y] and pix2[x, y] == 255:
这是我的密码

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:

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


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

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


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

Numpy中的惯例是,坐标是先是
y
,然后是
x
。因此,您需要:

pix1[y,x]

Numpy中的约定是,首先是
y
坐标,然后是
x
。因此,您需要:

pix1[y,x]

这里的错误是索引超出范围现在的错误相同这里的错误是索引超出范围现在的错误相同