使用Python找到相似图片的方法

news2024/10/13 2:15:31

使用Python找到相似图片的方法

作者:安静到无声 个人主页

摘要:在日常生活中,我们可能会遇到需要查找相似图片的情况。例如,我们可能有一张图片,并希望找到文件夹中与该图片相似的其他图片。本文将介绍如何使用Python代码来快速找到相似图片。

正文:

  1. 导入所需的库和模块:
import os
from PIL import Image
  1. 定义一个函数,用于计算图片的哈希值:
def get_image_hash(image_path):
    with Image.open(image_path) as img:
        img = img.convert("L").resize((8, 8), Image.ANTIALIAS)
        avg_pixel = sum(list(img.getdata())) / 64
        hash_value = ''.join(map(lambda x: '1' if x > avg_pixel else '0', list(img.getdata())))

        return hash_value
  1. 定义一个函数,用于找到相似的图片:
def find_similar_images(target_image_path, folder_path):
    target_hash = get_image_hash(target_image_path)

    for root, dirs, files in os.walk(folder_path):
        for file_name in files:
            if file_name.endswith('.png') or file_name.endswith('.jpg') or file_name.endswith('.jpeg'):
                image_path = os.path.join(root, file_name)
                image_hash = get_image_hash(image_path)
                if image_hash == target_hash:
                    print(file_name)
  1. 执行主程序:
if __name__ == '__main__':
    # 设置目标图片和文件夹路径
    target_image_path = r'目标图片路径'
    folder_path = r'文件夹路径'

    find_similar_images(target_image_path, folder_path)

将代码中的目标图片路径替换为要查找相似图片的目标图片的路径,将文件夹路径替换为包含要搜索的图片的文件夹路径。

  1. 运行程序并等待结果。程序会在文件夹中查找与目标图片相似的其他图片,并输出它们的文件名。

结论:使用以上代码,我们可以快速找到与目标图片相似的其他图片。这对于整理图片、查找重复内容或进行图片识别等任务非常有用。

推荐专栏

💖模式识别与人工智能(程序与算法)

  1. 机器学习MATLAB实现
    1. 机器学习MATLAB实现:Matalb-邻域平均法、均值滤波法、中值滤波法对图像进行平滑去噪_邻域平均滤波
    2. 机器学习MATLAB实现:MATLAB-直方图均衡化_matlab直方图均衡化
    3. 机器学习MATLAB实现:基于DCT变换的JPEG图像压缩_dct变换图像压缩
    4. 机器学习MATLAB实现:Matalb-图像均值滤波,中值滤波,梯度锐化(sobel算子)的实现_matlab sobel滤波
    5. 机器学习MATLAB实现:Matlab-梯度Roberts算子、拉普拉斯算子、Sobel算子、Prewitt算子对图像进行锐化
    深度学习
    1. 深度学习调参经验:优化神经网络性能的关键八大步骤
    Python示例
    1. Python代码示例:将一个文件夹中未标记的文件复制到另一个文件夹

    2. Python代码示例:比较两个文件夹中的文件名并打印相同的文件

    3. Python代码示例:使用Pillow库轻松实现图像尺寸调整——>使每个图像具有相同的大小,方便模型处理和训练_pillow 获取图片尺寸_安静到无声的博客-CSDN博客

    4. Python代码示例:求取文件夹下图片的均值与方差——>消除异常数据,保证所有像素值都处于比较合理的范围,提高模型的性能。_安静到无声的博客-CSDN博客

    5. Python代码示例:使用Python的Pillow库对图片进行格式转换和重命名

    6. Python代码示例:利用Python代码批量修改文件名_批量修改文件名

    7. Python代码示例:遍历文本文件中的图片信息并复制图片

    8. Python代码示例:Python实现Imagenet数据集的合并和拆分

    9. Python代码示例:AI助手帮你轻松做好Imagenet数据集重命名与复制

    10. Python代码示例:python实现获取当前目录下的树形结构_python 读取目录结构

    11. Python代码示例:使用ChatGPT快速实现灰度和RGBA图片转换为RGB三通道图片的Python数据清洗demo_python rgba转rgb

    12. Python代码示例:如何将通过Image.open读出的图片从单通道->三通道

    13. 用Python对文件夹下的图片命名进行批量更改_python修改图片名

    14. Python代码示例:爬取网站图片

    15. Python代码示例:Python中的列表推导式(List Comprehensions)及其条件筛选法_python 列表推导式多个条件

    Opencv-python教程
    1. Opencv-python教程:python-opencv(1)图像的基础操作
    2. Opencv-python教程:python-opencv(2)图像运算
    3. Opencv-python教程:python-opencv(3)图像类型转换
    4. Opencv-python教程:python-opencv(4)–几何变换
    5. Opencv-python教程:python-opencv(10)图像金字塔
    6. Opencv-python教程:python-opencv(11)图像轮廓
    7. Opencv-python教程:python-opencv(12)直方图
    8. Opencv-python教程:python-opencv(13)傅里叶变换
    模式识别与机器学习(Python实现)
    1. 模式识别与机器学习(Python实现):基于sklearn朴素贝叶斯模型和pazen窗方法实现男女分类
    2. 模式识别与机器学习(Python实现):基于贝叶斯判决皮肤检测的简单实现
    3. 模式识别与机器学习(Python实现):基于PCA降维和KNN分类的人脸识别
    4. 模式识别与机器学习(Python实现):基于PCA–LDA的人脸识别
    5. 模式识别与机器学习(Python实现):基于聚类的图片分割
    6. 模式识别与机器学习(Python实现):决策树分男女
    7. 模式识别与机器学习(Python实现):基于压缩近邻法的分类问题
    8. 模式识别与机器学习(Python实现):如何用MCMC产生任意的概率分布随机数?Python简单实现
    Tensorflow学习
    Tensorflow1.x
    1. Tensorflow1.x:tf中tensor和numpy
    2. Tensorflow1.x:tf.Variable中trainable作用
    3. Tensorflow1.x:tesorflow 计算模型复杂度
    4. Tensorflow1.x:L2正则化和collection【tf.GraphKeys】
    5. Tensorflow1.x:Tensorflow 变量及共享变量
    Tensorflow2.x
    1. Tensorflow2.x:创建keras环境步骤
    2. Tensorflow2.x:tensorflow2.0 深度学习基础和tf.keras
    3. Tensorflow2.x:tensorflow2.0 卷积神经网络的实现实例(卫星与湖)
    4. Tensorflow2.x:tensorflow2.0 tf.keras序列问题
    5. Tensorflow2.x:tensorflow2.0 实例猫狗识别(1)
    6. Tensorflow2.x:tensorflow2.0 eager模式与自定义训练网络
    7. Tensorflow2.x:tensorflow2.0 tf.keras猫狗识别(2)—自定义训练
    8. Tensorflow2.x:tebsorflow2.0 使用Keras编写自定义图层和模型
    9. Tensorflow2.x:tebsorflow2.0 多输出模型实例
    10. Tensorflow2.x:tebsorflow2.0 图像定位+分类(Oxford-IIIT数据集)
    11. Tensorflow2.x:tebsorflow2.0 图像语义分割(Oxford-IIIT数据集)
    Python语法
    1. Python语法:Python中hasattr的具体用法
    2. Python语法:python中的语法使用(easydict set() plt.subplots() assert)
    3. Python语法:os.path库常用函数的使用_标准库os.path中的函数用来获取参数指定
    4. Python语法:argparse使用方法简单总结_python的argparse用法
    5. Python语法:python __all__含义
    6. Python语法:numpy方法积累
    7. Python语法:如何优雅的学习的getattr()函数
    8. 如何在pycharm中指定GPU
    Pytorch语法
    1. Pytorch语法:pack_padded_sequence用法与完整示例
    2. Pytorch语法:pytorch中的torch.manual_seed()
    3. Pytorch语法:torch.autograd.Function 学习理解
    4. Pytorch语法:为什么设置cudnn.benchmark = True
    5. Pytorch语法:pytorch权重初始化_pytorch 权重初始化
    6. Pytorch语法:pytorch使用方法积累
    7. Pytorch语法:如何用Pytorch加载部分权重
    数据集使用
    1. pycocotools数据集讲解、安装与使用_安静到无声的博客-CSDN博客
    Linux调试
    1. Linux调试:更改CUDA版本<此博文仅供自己参考>_cuda怎么改版本
    2. Linux调试:linux操作命令_vi train.py
    3. Linux调试:如何优雅的解决Pycharm在jupyter notebook的Port问题
    4. Linux调试:如何优雅的在linux下对指定文件夹解压_linux解压单个文件
    5. Linux调试:Linux下文件夹的移动与复制_linux 复制整个文件夹
    6. Linux调试:如何优雅的使用GPU监控
    7. Linux调试:如何在远程服务器下运行tensorboard,并在本地服务器看运行情况
    pyqt使用
    1. 使用PyQt5创建图片查看器应用程序
    Bug调试
    1. Bug调试:成功解决OSError: [E050] Can’t find model ‘en_core_web_sm’._
    2. Bug调试:成功解决Resource punkt not found错误
    3. Bug调试:成功解决NLTK包的安装错误
    4. Bug调试:成功解决http.client.RemoteDisconnected: Remote end closed connection without response
    5. 成功解决:ValueError Cannot assign non-leaf Tensor to parameter ‘weight‘.md
    6. 成功解决AttributeError: module ‘torch.distributed‘ has no attribute ‘all_gather_base‘
    7. 成功解决ImportError: /home/mona/research/code/frankmocap/detectors/hand_object_detector/lib/model/C.cpy
    8. 成功解决安装spacy==2.x出现的问题:功解决sre_constants.error: bad escape \p at position 173-CSDN博客
    9. 成功解决安装spacy==2.x出现的问题:OSError: E050] Can‘t find model ‘en_core_web_sm‘. It doesn‘t seem to be …_
    其他
    1. 常用的水下图像数据集
    2. “微天气” - 一个基于微信小程序的智能天气预报体验_天气预报小程序开发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1108617.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二分法求多项式单根

输出格式&#xff1a; 在一行中输出该多项式在该区间内的根&#xff0c;精确到小数点后2位。 输入样例&#xff1a; 3 -1 -3 1 -0.5 0.5 输出样例&#xff1a; 0.33 idea 精确到小数点后两位 >阈值为0.001 solution1 #include <stdio.h> #include <math.h…

黑豹程序员-架构师学习路线图-百科:SpringBoot

文章目录 1、什么是SpringBoot&#xff1f;2、SpringBoot发展史3、为什么我们要使用SpringBoot 1、什么是SpringBoot&#xff1f; Spring Boot是一个用于创建独立的、基于Spring框架的Java应用程序的开源框架。 Spring Boot简化了Spring应用程序的开发和部署&#xff0c;使开发…

Java linux 部署命令

Java linux 部署命令 参考&#xff1a; nohup java -jar -Dspring.profiles.activetest businessIntegration-v2.0.0.jar & cd /var/www/datasync/backend/test 上传jar包 businessintegrationdatasynctask-v1.0.0.jar nohup java -jar -Dspring.profiles.activetest…

分位数损失和分位数回归

分位数损失和分位数回归 了解如何调整回归算法来预测数据的任何分位数 维亚切斯拉夫埃菲莫夫 跟随 出版于 走向数据科学 6 分钟阅读 1月29日 65 1 一、说明 右退出是一项机器学习任务&#xff0c;其目标是根据一组特征向量预测真实值。存在多种回归算法&#xff1a;线性回归…

(2023|AAAI,MS-VQGAN,分层扩散,PyU-Net,粗到细调制)Frido:用于复杂场景图像合成的特征金字塔扩散

Frido: Feature Pyramid Diffusion for Complex Scene Image Synthesis 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 基础 3. 方法 3.1 学习多尺度感知潜在 …

Blizzard Battle 上使用代理

要在 Blizzard Battle 上使用代理设置&#xff0c;首先需要确保您已经安装了 Blizzard 游戏客户端。下面是一个详细的教程&#xff0c;将带您完成代理设置&#xff1a; 打开 Blizzard 游戏客户端。 在顶部菜单栏中&#xff0c;点击“设置”&#xff08;即齿轮图标&#xff09;…

远程开户身份证识别OCR技术:革新传统流程,实现高效身份验证

远程开户是指通过互联网或其他远程通信方式&#xff0c;不需要亲自前往银行、证券公司或其他金融机构的实体营业网点&#xff0c;即可完成开立账户和办理相关服务的过程。 相比传统柜台开户方式&#xff0c;远程开户具有更高的便利性和灵活性。它使得用户可以随时随地通过网络…

Linux权限基础知识

前言&#xff1a;作者也是初学Linux&#xff0c;可能总结的还不是很到位 Linux修炼功法&#xff1a;初阶功法 ♈️今日夜电波&#xff1a;修炼爱情 —林俊杰 0:30━━━━━━️&#x1f49f;──────── 4:47 …

CUDA编程入门系列(二) GPU硬件架构综述

一、Fermi GPU Fermi GPU如下图所示&#xff0c;由16个SM&#xff08;stream multiprocessor&#xff09;组成&#xff0c;不同的SM之间通过L2 Cache和全局内存进行相连。整个架构大致分为两个层次&#xff0c;①总体架构由多个SM组成 ②每个SM由多个SP core&#xff08;stream…

从零开始的C语言学习第二十课:数据在内存中的存储

目录 1. 整数在内存中的存储 2. 大小端字节序和字节序判断 2.1 什么是大小端&#xff1f; 2.2 为什么有大小端? 3. 浮点数在内存中的存储 3.1 浮点数存的过程 3.2 浮点数取的过程 1. 整数在内存中的存储 在讲解操作符的时候&#xff0c;我们就讲过了下⾯的内容&#x…

Day3力扣打卡

打卡记录 改变一个整数能得到的最大差值&#xff08;贪心&#xff09; 链接 得到最大的整数&#xff0c;找到一个高位将它修改为 9。同理&#xff0c;想要得到最小的整数&#xff0c;找到一个高位将它修改为 0。 class Solution { public:int maxDiff(int num) {auto replace …

国内首家,极越展示纯视觉城市NOA,正面对决特斯拉FSD

作者 | 德新 编辑 | 王博 10月17日&#xff0c;极越宣布其基于纯视觉的高阶智驾方案&#xff0c;已在上海核心城区跑通城市领航辅助功能&#xff0c;同时官方还首次公布了与百度联合开发的Occupancy占用格栅网络技术。 基于对极越一贯的判断&#xff0c;我们认为&#xff0c;…

一些经典的神经网络(第17天)

1. 经典神经网络LeNet LeNet是早期成功的神经网络&#xff1b; 先使用卷积层来学习图片空间信息 然后使用全连接层来转到到类别空间 【通过在卷积层后加入激活函数&#xff0c;可以引入非线性、增加模型的表达能力、增强稀疏性和解决梯度消失等问题&#xff0c;从而提高卷积…

集成学习方法(随机森林和AdaBoost)

释义 集成学习很好的避免了单一学习模型带来的过拟合问题 根据个体学习器的生成方式&#xff0c;目前的集成学习方法大致可分为两大类&#xff1a; Bagging(个体学习器间不存在强依赖关系、可同时生成的并行化方法) 流行版本&#xff1a;随机森林(random forest)Boosting(个体…

8.strtok函数

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h>int main() {/*----------------------函数解析----------------------*//*函数原型&#xff1a;char* strtok(char* str, char const* sep)*//*函数入参&#xff1a;第一个参数是要分割的…

Layui 主窗口调用 iframe 弹出框模块,获取控件的相应值

var iframeWindow window[layui-layer-iframe index]; iframeWindow.layui.tree............(这里就可以操作tree里面的内容了)。var chrild layero.find(iframe).contents(); chrild.layui.tree (这样是调用不到的)。var child layer.getChildFrame(); child.layui.tree(这…

Linux常见指令及热键

文章目录 1. ls 指令语法实例 2. pwd 指令语法实例 3. cd 指令语法实例 4. touch 指令语法实例 5. mkdir语法实例 6. rmdir 指令语法实例 7. rm 指令语法实例 8. man 指令语法实例 9. cp 指令语法实例 10. mv 指令语法实例 11. cat 指令使用权限语法格式参数说明&#xff1a;实…

【Java系列】Java 简介

目录 Java 简介主要特性发展历史Java 开发工具系列文章版本记录 Java 简介 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James Gosling和同事们共同研发&#xff0c;并在 1995 年正式推出。 后来 Sun 公司被 Ora…

Android apkanalyzer简介

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、用法3.1 使用 Android Studio3.1.1…