• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python图片检索之以图搜图

python 搞代码 4年前 (2022-01-07) 33次浏览 已收录 0个评论
文章目录[隐藏]

由于很多论文里面的测试图片没有标号,就不能确定它们是Testset数据集中哪几张图片.为了能解决这个问题,需要完成以图片去搜索整个数据集文件目录的任务.本文有非常详细的图文示例,需要的朋友可以参考下

一、待搜索图

二、测试集

三、new_similarity_compare.py

 # -*- encoding=utf-8 -*- from image_similarity_function import * import os import shutil # 融合相似度阈值 threshold1 = 0.70 # 最终相似度较高判断阈值 threshold2 = 0.95 # 融合函数计算图片相似度 def calc_image_similarity(img1_path, img2_path): """ :param img1_path: filepath+filename :param img2_path: filepath+filename :return: 图片最终相似度 """ similary_ORB = float(ORB_img_similarity(img1_path, img2_path)) similary_phash = float(phash_img_similarity(img1_path, img2_path)) similary_hist = float(calc_similar_by_path(img1_path, img2_path)) # 如果三种算法的相似度最大的那个大于0.7,则相似度取最大,否则,取最小。 max_three_similarity = max(similary_ORB, similary_phash, similary_hist) min_three_similarity = min(similary_ORB, similary_phash, similary_hist) if max_three_similarity > threshold1: result = max_three_similarity else: result = min_three_similarity return round(result, 3) if __name__ == '__main__': # 搜索文件夹 filepath = r'D:\Dataset\cityscapes\leftImg8bit\val\frankfurt' #待查找文件夹 searchpath = r'C:\Users\Administrator\Desktop\cityscapes_pa<p style="color:transparent">来源gao!%daima.com搞$代*!码网</p>per' # 相似图片存放路径 newfilepath = r'C:\Users\Administrator\Desktop\result' for parent, dirnames, filenames in os.walk(searchpath): for srcfilename in filenames: img1_path = searchpath +"\\"+ srcfilename for parent, dirnames, filenames in os.walk(filepath): for i, filename in enumerate(filenames): print("{}/{}: {} , {} ".format(i+1, len(filenames), srcfilename,filename)) img2_path = filepath + "\\" + filename # 比较 kk = calc_image_similarity(img1_path, img2_path) try: if kk >= threshold2: # 将两张照片同时拷贝到指定目录 shutil.copy(img2_path, os.path.join(newfilepath, srcfilename[:-4] + "_" + filename)) except Exception as e: # print(e) pass 

四、image_similarity_function.py

 # -*- encoding=utf-8 -*- # 导入包 import cv2 from functools import reduce from PIL import Image # 计算两个图片相似度函数ORB算法 def ORB_img_similarity(img1_path, img2_path): """ :param img1_path: 图片1路径 :param img2_path: 图片2路径 :return: 图片相似度 """ try: # 读取图片 img1 = cv2.imread(img1_path, cv2.IMREAD_GRAYSCALE) img2 = cv2.imread(img2_path, cv2.IMREAD_GRAYSCALE) # 初始化ORB检测器 orb = cv2.ORB_create() kp1, des1 = orb.detectAndCompute(img1, None) kp2, des2 = orb.detectAndCompute(img2, None) # 提取并计算特征点 bf = cv2.BFMatcher(cv2.NORM_HAMMING) # knn筛选结果 matches = bf.knnMatch(des1, trainDescriptors=des2, k=2) # 查看最大匹配点数目 good = [m for (m, n) in matches if m.distance <0.75 * n.distance] similary = len(good) / len(matches) return similary except: return '0' # 计算图片的局部哈希值--pHash def phash(img): """ :param img: 图片 :return: 返回图片的局部hash值 """ img = img.resize((8, 8), Image.ANTIALIAS).convert('L') avg = reduce(lambda x, y: x + y, img.getdata()) / 64. hash_value = reduce(lambda x, y: x | (y[1] << y[0]), enumerate(map(lambda i: 0 if i 

五、结果

到此这篇关于Python图片检索之以图搜图的文章就介绍到这了,更多相关Python以图搜图内容请搜索gaodaima搞代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持gaodaima搞代码网

以上就是Python图片检索之以图搜图的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python图片检索之以图搜图
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址