Quellcode durchsuchen

图片特征值比较 hash

derrickx vor 10 Monaten
Ursprung
Commit
6564ae8a0e

BIN
.DS_Store


BIN
images/1.jpg


BIN
images/2.jpg


BIN
images/3.jpeg


BIN
tools/__pycache__/__init__.cpython-311.pyc


BIN
tools/__pycache__/document_util.cpython-311.pyc


BIN
tools/__pycache__/logger_util.cpython-311.pyc


BIN
tools/__pycache__/pic_util.cpython-311-pytest-8.2.0.pyc


BIN
tools/__pycache__/redis_pool.cpython-311.pyc


BIN
tools/__pycache__/redis_util.cpython-311.pyc


+ 0 - 0
tools/logs/spider-terminal_2024-12-15.log


+ 54 - 0
tools/pic_util.py

@@ -0,0 +1,54 @@
+import cv2
+from PIL import Image
+import numpy as np
+
+def a_hash_a(image_path):
+    # 打开图片
+    image = Image.open(image_path)
+    # 缩小图片尺寸到8x8
+    image = image.resize((8, 8), Image.Resampling.LANCZOS)
+    # 转换为灰度图
+    image = image.convert('L')
+    # 将图片转换为numpy数组
+    data = np.array(image)
+    # 计算所有像素的灰度平均值
+    mean_value = data.mean()
+    # 比较每个像素的灰度与平均值,生成hash值
+    hash_str = ''.join(['1' if i > mean_value else '0' for i in data.flatten()])
+    # 返回64位的hash值
+    return int(hash_str, 2)
+
+
+def a_hash_b(image_path):
+    # 打开图片
+    image = Image.open(image_path)
+    # 缩小图片尺寸到32x32
+    image = image.resize((32, 32), Image.Resampling.LANCZOS)
+    # 转换为灰度图
+    image = image.convert('L')
+    # 将图片转换为numpy数组
+    data = np.array(image)
+    # 应用DCT变换
+    dct = dct_transform(data)
+    # 取左上角8x8的DCT系数
+    dct_low = dct[:8, :8]
+    # 计算DCT系数的平均值
+    mean_value = dct_low.flatten().mean()
+    # 比较每个DCT系数与平均值,生成hash值
+    hash_str = ''.join(['1' if i >= mean_value else '0' for i in dct_low.flatten()])
+    # 返回64位的hash值
+    return int(hash_str, 2)
+
+def dct_transform(image):
+    # 将图片转换为灰度图
+    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
+    # 应用2D离散余弦变换
+    dct = cv2.dct(np.float32(gray_image))
+    return dct
+
+
+if __name__ == '__main__':
+
+    hash_value1 = a_hash_a('../images/3.jpeg')
+    hash_value2 = a_hash_a('../images/2.jpg')
+    print(f'running 1... {hash_value1}  2... {hash_value2}')