0

我正在尝试使用 python ImageHash 库执行差异散列并不断收到一个 numpy 错误。

错误:

文件“/Users/testuser/Desktop/test_folder/test_env/lib/python3.8/site-packages/imagehash.py”,第 252 行,在 dhash image = image.convert("L").resize((hash_size + 1 , hash_size), Image.ANTIALIAS) AttributeError: 'numpy.ndarray' 对象没有属性 'convert'

编码:

from PIL import Image
from cv2 import cv2
import imagehash
import numpy as np

def hash_and_compare(image1, image2):
    image1 = image1
    image2 = image2

    # read images
    image1 = cv2.imread(image1)
    image2 = cv2.imread(image2)

    # convert to grayscale
    image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
    image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)

    # resize images
    image1 = cv2.resize(image1, (9, 8))
    image2 = cv2.resize(image2, (9, 8))

    # hash images
    image1_hash = imagehash.dhash(image1)
    image2_hash = imagehash.dhash(image2)

    # compute hamming distance
    distance = image1_hash - image2_hash

    if image1_hash <= 10:
        print(distance)
        print('match')
    else:
        print(distance)
        print('no match')

hash_and_compare('/Users/testuser/Desktop/test_folder/game_name056496.png', '/Users/testuser/Desktop/test_folder/game_name499761.png')
4

1 回答 1

1

正如 imagehash 库的文档中提到的那样,@image must be a PIL instance.. 所以你不能将numpy数组设置为dshash函数的输入。如果你想用opencv做一些预处理,你应该在把它设置成dhash之前把它转换成PIL数组,像这样:

import numpy as np
from PIL import Image
...
some preprocess
...
# You may need to convert the color.
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
im_pil = Image.fromarray(img)
image1_hash = imagehash.dhash(im_pil)
于 2021-04-27T04:42:07.787 回答