import os
import cv2 as cv
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt#读取文件
def read_img():imgs = []# walk会返回3个参数,分别是路径,目录list,文件listfor path, lists, frame in os.walk(文件名):for f in frame:#读取中文路径图像img = cv.imdecode(np.fromfile(path + "/" + f, dtype=np.uint8), 1)imgs.append(img)return frame,imgs
#把图像分为五部分
def fif_img(img):img= cv.cvtColor(img, cv.COLOR_BGR2HSV)h,w = img.shape[:2]cv.line(img,(int(w/2),0),(int(w/2),h),(255,0,0),2)cv.line(img,(0,int(h/2)),(w,int(h/2)),(255,0,0),2)clie = np.zeros((h,w),np.uint8)cv.ellipse(clie,(int(w/2),int(h/2)),(int(0.375*w),int(0.375*h)),0,0,360,255,-1)img1 = cv.bitwise_and(img,img,mask=clie)retra,clie1 = cv.threshold(clie,0,255,cv.THRESH_BINARY_INV)clie2 = clie1.copy()clie3 = clie1.copy()clie4 = clie1.copy()cv.rectangle(clie1,(int(w/2),0),(w,h),0,-1)cv.rectangle(clie1,(0,int(h/2)),(w,h),0,-1)img2 = cv.bitwise_and(img,img,mask=clie1)cv.rectangle(clie2,(0,0),(int(w/2),h),0,-1)cv.rectangle(clie2,(int(w/2),int(h/2)),(w,h),0,-1)img3 = cv.bitwise_and(img,img,mask=clie2)cv.rectangle(clie3,(0,0),(w,int(h/2)),0,-1)cv.rectangle(clie3,(int(w/2),int(h/2)),(w,h),0,-1)img4 = cv.bitwise_and(img,img,mask=clie3)cv.rectangle(clie4,(0,0),(w,int(h/2)),0,-1)cv.rectangle(clie4,(0,int(h/2)),(int(w/2),h),0,-1)img5 = cv.bitwise_and(img,img,mask=clie4)imgs = []imgs.extend([img1,img2,img3,img4,img5])return imgsdef zft_img(name,img_score):colum = dict()for i in range(len(img_score)):hist = []imgs = fif_img(img_score[i])for ig in range(len(imgs)):hist_img = cv.calcHist([imgs[ig]], [0,1,2], None,(8,12,3), [0,180,0,256,0,256])#归一化hist.append(pd.Series(cv.normalize(hist_img,hist_img).flatten()))colum[name[i]] = pd.concat(hist)colum = pd.DataFrame(colum)return colum#一张图像的直方图
def first_zft(name,image):colum = dict()hist = []imgs = fif_img(image)for ig in range(len(imgs)):hist_img = cv.calcHist([imgs[ig]], [0, 1, 2], None, (8, 12, 3), [0, 180, 0, 256, 0, 256])# 归一化hist.append(pd.Series(cv.normalize(hist_img, hist_img).flatten()))colum[name] = pd.concat(hist)colum = pd.DataFrame(colum)return colum#储存
def Storage_img(colum):colum.to_csv('temp/img.csv',index=False)#欧式距离
def o_distance(new_data,old_data):name = old_data.columnsdistances = dict()for i in range(len(name)):distance = 0for j in range(len(new_data.values)):distance = distance + ((new_data.values[j] - old_data[name[i]].values[j]) ** 2)distances[name[i]] = np.sqrt(distance)dist = sorted(distances.items(), key=lambda s: s[1])print(dist)name_img = []for i in range(10):print(dist[i])name_img.append(dist[i][0])return name_img#卡方距离
def ka_distance(new_data,old_data):name = old_data.columnsdistances = dict()for i in range(len(name)):distance = 0for j in range(len(new_data.values)):distance = float(distance) + float(((new_data.values[j] - old_data[name[i]].values[j]) ** 2)/(new_data.values[j] + old_data[name[i]].values[j] + 0.0000001))distances[name[i]] = distance * 0.5dist = sorted(distances.items(), key=lambda s: s[1])name_img = []for i in range(10):name_img.append(dist[i][0])return name_img#保存图像放入新文件夹
def write_img(img):print("类似图像:",img)imgs = dict()for path, lists, frame in os.walk(文件名):for f in frame:# 读取中文路径图像image = cv.imdecode(np.fromfile(path + "/" + f, dtype=np.uint8), 1)imgs[f] = imagefor ig in img:cv.imwrite(保存路径+ig,imgs[ig])# name,image = read_img()
# # zft_img(name,image)
# # Storage_img(zft_img(name,image))
#-*- coding: utf-8 -*-
import cv2 as cv
import numpy as np
import pandas as pd
from yitusoutu import *img_name = input('请输入图像路径名称:')
# file = open(img_name,'r')
#读入中文
img = cv.imdecode(np.fromfile(img_name, dtype=np.uint8), 1)
cv.imshow('img',img)
name,img_score = read_img()
old_colum = zft_img(name,img_score)
new_colum = first_zft(img_name,img)
write_img(o_distance(new_colum,old_colum))
cv.waitKey(0)
cv.destroyAllWindows()

python 以图搜图相关推荐

  1. python以图搜图_以图搜图(一):Python实现dHash算法(转)

    近期研究了一下以图搜图这个炫酷的东西.百度和谷歌都有提供以图搜图的功能,有兴趣可以找一下.当然,不是很深入.深入的话,得运用到深度学习这货.Python深度学习当然不在话下. 这个功能最核心的东西就是 ...

  2. 【python 以图搜图】三种图片相似度计算融合算法

    目标:在一个文件夹找出相似度较高的图片,达到以图搜图的目的. 我找了十组,都是高度相似的图片. 核心算法: 1.分别自定义三种计算图片相似度算法,计算图片相似度算法ORB算法,以及局部敏感哈希phas ...

  3. 以图搜图算法pytorch,Python以图搜图爬虫

    python可以用图搜图吗 谷歌人工智能写作项目:小发猫 百度图片搜索引擎原理是如何实现的 图片搜索的原理有三个步骤1. 将目标图片进行特征提取,描述图像的算法很多,用的比较多的是:SIFT描述子,指 ...

  4. python以图搜图api_Python深度学习,手把手教你实现「以图搜图」

    随着深度学习的崛起,极大的推动了图像领域的发展,在提取特征这方面而言,神经网络目前有着不可替代的优势.之前文章中我们也介绍了图像检索往往是基于图像的特征比较,看特征匹配的程度有多少,从而检索出相似度高 ...

  5. python以图搜图api_网络图片搜索-以图搜图【最新版】_自动识别接口_图像识别_数据API-云市场-阿里云...

    {"moduleinfo":{"advanList_count":[{"count_phone":4,"count":4 ...

  6. 以图搜图Python实现Hash算法

    以图搜图(一):Python实现dHash算法 http://yshblog.com/blog/43 以图搜图(二):Python实现pHash算法 http://yshblog.com/blog/4 ...

  7. 以图搜图(一):python aHash算法

    文章目录 感知哈希算法 实现过程 python代码 缺点 感知哈希算法 以图搜图的关键技术叫做"感知哈希算法"(Perceptual hash algorithm),它的作用是对每 ...

  8. python+milvus实现一个以图搜图系统

    目录 引言 说明 准备数据 训练数据 安装minlvus(docker-compose方式) python集成milvus+towhee python后端启动方式 启动前端 查询数据 引言 当您听到& ...

  9. python tensorflow 以图搜图_GitHub - lomoss/SearchImage: 基于VGG16的图像检索系统,简单的以图搜图。...

    项目介绍: 一个简单以图搜图的demo项目,采用vgg16提取特征值,使用Miluvs向量搜索引擎,只有简单几个文件,没有什么技术含量. 项目目录: -SearchImage#项目 -app#Flas ...

最新文章

  1. ROS_Kinetic ubuntu 16.04
  2. 编码练习——Java-2-流程控制
  3. win10 java无法运行_Win10中配置jdk之后javac无法运行
  4. Git HTTP方式克隆远程仓库到本地
  5. 己椒苈黄汤治水肿案(联想的风)
  6. 打印三角形(Java)
  7. asp.net 母版页使用详解--转
  8. 外包!音频类小程序开发
  9. linux yum下载不安装,CentOS 7设置yum仅仅下载rpm不安装总结
  10. Allegro PCB操作技巧
  11. 比凡尔赛更厉害的,是豆瓣组学
  12. 人机交互与计算机科学,阐述人机交互方式的变革引领计算机科学的发展
  13. esp8266保存html文件,八,ESP8266 文件保存数据(示例代码)
  14. java 比大小(四种方法任选)
  15. 谭浩强c语言不讲位运算呢,谭浩强C语言教程第十二章-位运算.doc
  16. Eclipse开发工具--简介
  17. #芯片# LTC2990
  18. [转载]吃什么鱼最健康?(图)
  19. 【== 与 equals】
  20. 给自己的博客园装饰萌萝莉(live2d)

热门文章

  1. smm整合pom依赖
  2. 光伏企业狠砸钱为何就做不起来农村分布式?
  3. Java程序员,你会选择25k的996还是18k的965?
  4. IP Camera / Network Camera - Comments
  5. 胆囊炎的病因是怎么引起的?
  6. 5大保障思维模型, 揭秘温莎大师如何做生活应用决策
  7. 文件的基本操作--利用爬取的王者荣耀李信台词进行练习
  8. 杂项-操作系统:操作系统百科
  9. Kafka实践(八):Kafka的控制器controller
  10. 笔记——流水线基础概念