phash = imagehash.phash ahash = imagehash.average_hash dhash = imagehash.dhash whash = imagehash.whash
时间: 2024-06-08 19:03:49 浏览: 189
在Python的imagehash库中,`phash`, `average_hash`, `dhash`, 和 `whash` 是四种不同的图像哈希算法(Image Hashing Algorithms):
1. `phash` (Perceptual Hash):也称为PHash,这是一种基于像素亮度差异的简单哈希方法。它计算图像中局部区域的亮度平均值并进行二进制转换,生成的哈希值对于视觉上相似的图片变化非常不敏感。
2. `average_hash`:平均哈希(Average Hash)是对整个图像取平均颜色值后计算的哈希,常用于快速比较图像的整体相似度。
3. `dhash` (Difference Hash):差分哈希(Difference Hash)通过逐行或逐列比较像素差异来生成哈希,它的特点是计算速度快,对小的平移变化敏感。
4. `whash` (Wavelet Hash):小波哈希(Wavelet Hash)使用小波变换来提取图像的特征,可以提供更细致的图像相似度分析,对于旋转、缩放等变形有较好的鲁棒性。
这些函数通常用于图像内容识别、相似度比较、重复检测等场景,它们返回的结果是整数数组或哈希值,可以方便地进行图片的快速匹配和识别。
相关问题
通过pHash算法实现相似图片检测的GUI界面python代码
以下是一个基于pHash算法的相似图片检测的GUI界面Python代码:
```python
import os
import sys
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
import imagehash
class App(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.select_button = tk.Button(self)
self.select_button["text"] = "Select Image"
self.select_button["command"] = self.select_image
self.select_button.pack(side="top")
self.compare_button = tk.Button(self)
self.compare_button["text"] = "Compare Images"
self.compare_button["command"] = self.compare_images
self.compare_button.pack(side="bottom")
def select_image(self):
self.filename = filedialog.askopenfilename(initialdir=os.getcwd(), title="Select Image", filetypes=(("jpeg files", "*.jpg"), ("png files", "*.png"), ("all files", "*.*")))
self.load_image()
def load_image(self):
self.image = Image.open(self.filename)
self.photo = ImageTk.PhotoImage(self.image)
self.image_label = tk.Label(image=self.photo)
self.image_label.pack(side="top")
def compare_images(self):
hash1 = imagehash.average_hash(self.image)
for filename in os.listdir(os.getcwd()):
if filename.endswith(".jpg") or filename.endswith(".png"):
image = Image.open(filename)
hash2 = imagehash.average_hash(image)
if hash1 - hash2 < 10:
result_label = tk.Label(text=filename + " is similar to " + self.filename)
result_label.pack(side="bottom")
root = tk.Tk()
app = App(master=root)
app.mainloop()
```
在这个GUI界面中,用户可以选择一个图像,然后点击“Compare Images”按钮,以与当前目录中的所有图像进行比较。如果找到一个与选定图像相似的图像,则会将其文件名显示在窗口底部。该算法使用平均哈希算法来计算图像的哈希值,并将哈希值之间的差异限制为10。这可以通过调整“< 10”语句中的值来更改。
由pHash算法识别出的相似图片的GUI代码
以下是使用Python和PyQt5编写的简单GUI代码示例,用于使用pHash算法识别相似图片:
```python
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QFileDialog
from PyQt5.QtGui import QPixmap
import imagehash
from PIL import Image
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('Image Similarity Checker')
# 创建组件
self.label1 = QLabel('Image 1:')
self.label2 = QLabel('Image 2:')
self.image1 = QLabel()
self.image2 = QLabel()
self.button1 = QPushButton('Upload Image 1')
self.button2 = QPushButton('Upload Image 2')
self.compare_button = QPushButton('Compare Images')
# 创建布局
self.layout = QVBoxLayout()
self.layout1 = QHBoxLayout()
self.layout2 = QHBoxLayout()
# 添加组件到布局中
self.layout1.addWidget(self.label1)
self.layout1.addWidget(self.image1)
self.layout1.addWidget(self.button1)
self.layout2.addWidget(self.label2)
self.layout2.addWidget(self.image2)
self.layout2.addWidget(self.button2)
self.layout.addLayout(self.layout1)
self.layout.addLayout(self.layout2)
self.layout.addWidget(self.compare_button)
# 设置主窗口布局
self.setLayout(self.layout)
# 连接按钮点击事件
self.button1.clicked.connect(self.upload_image1)
self.button2.clicked.connect(self.upload_image2)
self.compare_button.clicked.connect(self.compare_images)
self.image1_path = None
self.image2_path = None
# 上传图片1
def upload_image1(self):
fname = QFileDialog.getOpenFileName(self, 'Open file', './')
if fname[0]:
self.image1_path = fname[0]
pixmap = QPixmap(fname[0])
self.image1.setPixmap(pixmap)
# 上传图片2
def upload_image2(self):
fname = QFileDialog.getOpenFileName(self, 'Open file', './')
if fname[0]:
self.image2_path = fname[0]
pixmap = QPixmap(fname[0])
self.image2.setPixmap(pixmap)
# 比较图片
def compare_images(self):
if self.image1_path and self.image2_path:
hash1 = imagehash.average_hash(Image.open(self.image1_path))
hash2 = imagehash.average_hash(Image.open(self.image2_path))
similarity = hash1 - hash2
if similarity == 0:
message = 'The images are identical'
else:
message = f'The images are {similarity} bits different'
# 创建messagebox并显示结果
QMessageBox.information(self, 'Image Similarity', message)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
该程序使用PyQt5创建了一个简单的GUI,有两个上传按钮,用于选择要比较的两个图像,并有一个比较按钮。当用户单击“比较”按钮时,程序将使用pHash算法计算两个图像之间的相似度,并在消息框中显示相似度。
阅读全文