def remove_simillar_picture_by_perception_hash(path):     img_list = os.listdir(path)     hash_dic = {}     hash_list = []     count_num = 0     for img_name in img_list:         try:             img = cv2.imread(os.path.join(path, img_name))             img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)             count_num+=1             print(count_num)         except:             continue         img = cv2.resize(img,(8,8))         avg_np = np.mean(img)         img = np.where(img>avg_np,1,0)         hash_dic[img_name] = img         if len(hash_list)<1:             hash_list.append(img)         else:             for i in hash_list:                 flag = True                 dis = np.bitwise_xor(i,img)                 if np.sum(dis) < 5:                     flag = False                     os.remove(os.path.join(path, img_name))                     break             if flag:                 hash_list.append(img)

时间: 2024-04-16 19:24:54 浏览: 7
您已经添加了计算哈希值的部分,并使用感知哈希算法对图片进行了处理。在代码中,您将图片调整为8x8像素大小,并将其转换为灰度图像。然后,计算了灰度图像的平均像素值,并根据平均值对图像进行二值化处理。 随后,您创建了一个字典`hash_dic`来存储图像文件名与对应的哈希值。同时,使用列表`hash_list`来存储已处理过的哈希值。 在对每个图像进行处理时,您遍历了`hash_list`中的哈希值,并使用异或操作计算与当前图像哈希值的差异。如果差异小于阈值(这里是5),则将该图像视为重复,并从路径中删除。否则,将该图像的哈希值添加到`hash_list`中。 这样,通过比较哈希值的差异,您可以实现基于感知哈希算法的去重操作。请注意,这种方法对于近似相似的图片可能会有一定误差,因此阈值的选择需要根据具体情况进行调整。另外,如果删除图片后,需要更新`img_list`列表中的文件名,否则可能会出现错误。
相关问题

def remove_simillar_picture_by_perception_hash(path):     img_list = os.listdir(path)     hash_dic = {}     hash_list = []     count_num = 0     for img_name in img_list:         try:             img = cv2.imread(os.path.join(path, img_name))             img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)             count_num+=1             print(count_num)         except:             continue

这段代码看起来是用来根据感知哈希算法(perception hash)去除相似图片的。它通过遍历指定路径下的图片文件,并使用OpenCV库加载和处理图片。然后,将每个图片转换成灰度图像(使用`cv2.cvtColor`函数),并计算感知哈希值。 然而,在您提供的代码中,缺少了计算哈希值的部分。感知哈希算法通常包括以下步骤: 1. 调整图片的尺寸为固定大小,例如8x8像素。 2. 将图片转换为灰度图像。 3. 计算灰度图像的平均像素值。 4. 遍历所有像素点,将每个像素点与平均值进行比较,将大于平均值的像素点标记为1,小于平均值的像素点标记为0。 5. 将所有标记得到的二进制位串连接起来,形成感知哈希值。 您需要在代码中添加计算感知哈希值的部分,然后将哈希值存入`hash_list`列表或`hash_dic`字典中,并在遍历图片时进行去重操作。

def remove_simillar_image_by_ssim(path):     img_list = os.listdir(path)     img_list.sort()     hash_dic = {}     save_list = []     count_num = 0     for i in range(len(img_list)):         try:             img = cv2.imread(os.path.join(path, img_list[i]))             img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)             img = cv2.resize(img,(256, 256))             count_num+=1         except:             continue         if count_num==1:             save_list.append(img_list[i])             continue         elif len(save_list) <5:             flag = True             for j in range(len(save_list)):                 com_img = cv2.imread(os.path.join(path,save_list[j]))                 com_img = cv2.cvtColor(com_img,cv2.COLOR_BGR2GRAY)                 com_img = cv2.resize(com_img,(256,256))                 sim = compare_ssim(img,com_img)                 if sim > 0.4:                     os.remove(os.path.join(path,img_list[i]))                     flag = False                     break             if flag:                 save_list.append(img_list[i])         else

这段代码使用了结构相似性指数(SSIM)来去除相似图片。SSIM是一种用于测量两幅图像结构相似度的指标。 在代码中,首先对指定路径下的图片进行排序,并创建了一个哈希表`hash_dic`和一个保存列表`save_list`。然后,通过遍历图片列表,加载、处理和调整每个图片的尺寸。 在处理每个图片时,首先判断是否为第一张图片。如果是,将其加入到保存列表中。如果不是第一张图片,则遍历保存列表中的图片,并使用`compare_ssim`函数计算当前图片与保存列表中每张图片的SSIM值。 如果找到了与当前图片相似度高于0.4的图片,就将当前图片删除。否则,将其加入到保存列表中。 需要注意的是,在代码的最后一行缺少了处理在没有相似图片时的情况,您可以根据需求进行补充。 这段代码可以帮助您通过SSIM指标去除相似图片,但需要注意SSIM阈值的选择,以及在删除图片后更新图片列表的问题。

相关推荐

zip
协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。

最新推荐

recommend-type

安装NumPy教程-详细版

附件是安装NumPy教程_详细版,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!
recommend-type

语音端点检测及其在Matlab中的实现.zip

语音端点检测及其在Matlab中的实现.zip
recommend-type

C#文档打印程序Demo

使用C#完成一般文档的打印,带有页眉,页脚文档打印,表格打印,打印预览等
recommend-type

DirectX修复工具-4-194985.zip

directx修复工具 DirectX修复工具(DirectX repair)是系统DirectX组件修复工具,DirectX修复工具主要是用于检测当前系统的DirectX状态,若发现异常情况就可以马上进行修复,非常快捷,使用效果也非常好。
recommend-type

Python手动实现人脸识别算法

人脸识别的主要算法 其核心算法是 欧式距离算法使用该算法计算两张脸的面部特征差异,一般在0.6 以下都可以被认为是同一张脸 人脸识别的主要步骤 1 获得人脸图片 2 将人脸图片转为128D的矩阵(这个也就是人脸特征的一种数字化表现) 3 保存人脸128D的特征到文件中 4 获取其他人脸转为128D特征通过欧式距离算法与我们保存的特征对比,如果差距在0.6以下就说明两张脸差距比较小
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。