不能将集合与图像类型一起使用?

时间:2019-06-30 00:21:01

标签: python image arraylist set cv2

我正在使用pyautogui库,我想将屏幕快照保存在没有重复的列表中。该类型是Image格式,使其无法散列。有什么办法可以解决这个问题,使我可以在图像上使用集?

我收到的错误消息是TypeError: unhashable type: 'Image'

import pyautogui
import time
import cv2
import numpy as np
import os
x = 1
pictures = []
check = []
while True:
    image = pyautogui.screenshot("image" + str(x) + '.png')
    check.append(image)
    print(len(check) != len(set(check)))
    x+=1
    time.sleep(2)

1 个答案:

答案 0 :(得分:0)

您可以使用hashlib模块为图像创建哈希值,然后手动将每个哈希值添加到集合中。我没有安装pyautogui,因此使用了PIL模块,该模块还提供了获取屏幕截图的功能。

import hashlib
#import pyautogui
from PIL import ImageGrab
import time

x = 1
pictures = []
image_hashes = set()  # Empty set.

for i in range(10):  # Do a limited number for testing.
#    image = pyautogui.screenshot()
    image = ImageGrab.grab()

    # Compute an image hash value.
    h = hashlib.sha256()
    h.update(image.tobytes())
    image_hash = h.digest()

    if image_hash not in image_hashes:
        pictures.append(image)
        image_hashes.add(image_hash)
#        image.save("image" + str(x) + '.png')  # Save image file.
        x += 1

    time.sleep(2)

print(len(pictures), 'unique images obtained')