毕设做了2周,实现了基本的本地识图功能,就两个文件,接下来复杂的功能就得多家几个文件了就变得麻烦,先发出来damo吧。

可以实现精确识图功能(缩略图那样的)

(界面没优化,将就着看看吧……当作毕设弄完我就发安装包)

环境:python3.6.3

包:pil、tkinter

DAOM源码(3个.py文件,分别粘贴设置启动文件即可运行界面及功能)

rontpage.py(启动文件)

from tkinter import *
from PIL import  ImageTk
from PIL import Image
import os#函数声明
#列出windows目录下的所有文件和文件名#图片-dHash算法
import _dhash
def startSearch():im1=Image.open( var1.get())#遍历文件夹并传到列表Const_Image_Format = [".jpg",".jpeg",".bmp",".png"]path= var2.get()list1=[]for (root, dirs, files) in os.walk(path):  for filename in files:if os.path.splitext(filename)[1] in Const_Image_Format :#print(os.path.join(root,filename))list1.append(os.path.join(root,filename))#遍历比较list2=[]for i in list1:im2=Image.open(i)j=_dhash.classfiy_dHash(im1,im2,size=(9,8))if j<=int(var3.get()):print(j)print(i)list2.append(str(100-3*j)+'%')list2.append(i)#在listbox显示lb.delete(0, END) for item in list2:lb.insert(END, item)    canvas.delete('all')#====================================load = Image.open(var1.get()) render= ImageTk.PhotoImage(load)  #render.resize((200,200)) img = Label(canvas,image=render)  img.image = render  img.place(x=0,y=0) #窗口开始===========================================================================
root = Tk()     # 初始旷的声明
root.title('嗅图狗')#设置窗口标题
root.geometry('800x500+500+200')#设置窗口的大小宽x高+偏移量
root.resizable(width=False, height=True) #宽不可变, 高可变,默认为True#标题
Label(root, text='嗅图狗',  bg="yellow",font=('Arial', 20)).pack(side=TOP)
frm = Frame(root)
frm.pack(fill=BOTH)#left左边显示给定图片
frm_L = Frame(frm,bg='gray')
frm_L.pack(side=LEFT)frm_LT = Frame(frm_L,bg='blue')
frm_LT.pack(side=TOP)Label(frm_LT, text='要找的图片的路径', font=(15)).pack(side=TOP)
var1 = StringVar()
e1 = Entry(frm_LT,width=30,textvariable = var1)
var1.set("请在此处输入需要查询的图片的路径")
e1.pack()Label(frm_LT, text='图片文件夹路径', font=(15)).pack(side=TOP)
var2 = StringVar()
e2 = Entry(frm_LT,width=30,textvariable = var2)
var2.set("请在此处输入需要搜索的文件夹路径")
e2.pack()var3 = StringVar()
e3 = Entry(frm_LT,width=3,textvariable=var3)
var3.set("10")
e3.pack(side=RIGHT)def print_select(v):e3.config(var3.set(str(v)))
s=Scale(frm_LT,label="误差百分比", from_=0,to=100,orient=HORIZONTAL,length=100,showvalue=0,tickinterval=25,resolution=10,command=print_select)
s.pack(side=RIGHT)b1 = Button(frm_LT,text="开始搜图",bg='green',width=10,height=1,command=startSearch)
b1.pack(side=LEFT)#right右边显示路径
frm_R = Frame(frm,bg='gray')
frm_R.pack()Label(frm_R, text='所找图片预览', font=(15)).pack()
canvas=Canvas(frm_R,width=400, height=400,bg='red')
image_file=PhotoImage(file='pic.png')
canvas.create_image(200,200,image=image_file)
canvas.pack(side=BOTTOM)def print_item(event):print (lb.get(lb.curselection()))#读取图像  im=Image.open(lb.get(lb.curselection()))  #显示图像  im.show()  Label(frm_L, text='找到的图片路径', font=(15)).pack()
lb = Listbox(frm_L, width=60)
lb.bind('<ButtonRelease-1>', print_item)
lb.pack(side=BOTTOM)print(var1.get())
print(var2.get())root.mainloop()#进入消息循环

以下算法博客来源:https://segmentfault.com/a/1190000004467183

来源GIT:https://github.com/MashiMaroLjc/Learn-to-identify-similar-images

_dhash.py(被上边的import,第10行)

from PIL import Image
from PIL import ImageFilter
from PIL import ImageOps
#This module can classfy the image by dHash
#
#author MashiMaroLjc
#version 2016-2-16def getCode(img,size):result = []# print("x==",size[0])# print("y==",size[1]-1)x_size = size[0]-1#widthy_size = size[1] #highfor x in range(0,x_size):for y in range(0,y_size):now_value = img.getpixel((x,y))next_value = img.getpixel((x+1,y))if next_value < now_value:result.append(1)else:result.append(0)return resultdef compCode(code1,code2):num = 0for index in range(0,len(code1)):if code1[index] != code2[index]:num+=1return num def classfiy_dHash(image1,image2,size=(9,8)):''' 'image1' and 'image2' is a Image Object.You can build it by 'Image.open(path)'.'Size' is parameter what the image will resize to it and then image will be compared to another image by the dHash.It's 9 * 8 when it default.  The function will return the hamming code,less is correct. '''image1 = image1.resize(size).convert('L')code1 = getCode(image1, size)image2 = image2.resize(size).convert('L')code2 = getCode(image2, size)assert len(code1) == len(code2),"error"return compCode(code1, code2)__all__=[classfiy_dHash]

2018.10.2================分割线==========

这篇写的东西,分别保存3个.py文件就能运行了。

成品度盘链接【嗅图狗.exe】(有的会有“找不到FP”的运行错误,我不知道pythoninstaller抽什么疯病……)

https://pan.baidu.com/s/1BSFGMbyQk1Fqgo4zL5WX4A

可用成品链接在↓

我新开了一篇博客,把做的过程,git都放了出来(上面说有问题的以后更新在这里 ):

https://blog.csdn.net/sinat_27382047/article/details/83040411

自己做的本地识图软件DAMO_嗅图狗相关推荐

  1. 利用思维导图软件绘制鱼骨图怎样做

    思维导图的类型有哪些? 圆圈图 主要用于把一个主题展开来,联想或描述细节.小圈圈是主题,而外面的大圈圈里放的是和这个主题有关的细节或特征 气泡图 由很多泡泡组成,中间一个主题泡泡描述核心主题,周围的属 ...

  2. 电脑小白学习第九课---看图软件之美图看看

    windows下看图软件有很多,windows系统自带的也有看图软件,不过很难用.今天推荐大家使用美图看看软件,查看电脑图片. 我们先下载这个软件,在百度搜索"美图看看",如下图所 ...

  3. 安卓机器人做图软件_美图秀秀绘画机器人app下载-美图绘画机器人Andy最新版下载v7.0.0.0-西西软件下载...

    美图绘画机器人Andy最新版是美图秀秀最新推出的AI智能绘画机器人,名叫Andy,这款软件可以让你的照片秒变插画,非常不错的一款软件,非常好玩,效果也非常的棒,欢迎大家前来西西下载美图绘画机器人And ...

  4. 安卓机器人做图软件_美图绘画机器人Andy

    美图绘画机器人Andy是美图最新发布的智能功能,是以人工智能为主的新功能,利用虚拟重建技术为你提供全新美图模式,只要上传一张你的自拍照,Andy就能把你的自拍照画出不同风格的插画. 绘画机器人Andy ...

  5. matlab生成三维图软件,Matlab三维图如何绘制?

    在计算机领域,有时候需要应用到三维曲面图,在这种情况下,我们首先要知道三维数据,分别为x,y,z的值,然后在借助Matlab工具来绘制三维曲面图.有了Matlab的帮助,可以很简单的实现三维曲面图的绘 ...

  6. 免费思维导图软件, 简单脑图工具,支持导出图片

    下载地址: 传送门 目前功能简单,不止支持样式自定义,节点左对齐,可在Y轴上拖动 使用很简单,每个节点有四个快捷,添加子节点,添加同级节点,删除节点,重新排列子节点 可以导出各种常用图片类型以及jso ...

  7. 有哪些好用的思维导图软件?

    思维导图是一种思维工具,它将大脑左半球的单词.数字.概念.判断.逻辑.序列.组织.框架等元素与大脑右半球的图像.线条.颜色.空间.位置.形状.整体等元素相结合,将一长串枯燥的信息转化为易于识别.理解和 ...

  8. 思维导图软件哪个免费更好用?MindManager、iMindMap、MindMappe

    思维导图软件,可以直观.便捷的呈现出我们心中的想法,所以无论是工作还是个人学习,都经常采用思维导图软件来辅助完成,给我们的工作增色不少. 常见的思维导图软件有MindManager.iMindMap. ...

  9. 如何做好读书笔记?这些脑图软件就够了!

    之前有很多小可爱问我,我的读书笔记是怎么做的?我会在阅读的时候使用一些脑图类的工具去辅助,久而久之就养成了一边阅读一边做读书笔记的好习惯,以下推荐的几款是我使用过的几款脑图软件. 亿图脑图 亿图脑图适 ...

  10. 千万级用户产品更名为“亿图脑图 MindMaster”背后:脑图软件市场高速增长

    东尼·博赞发明思维导图导图时,大概没想到思维导图会变得如此受欢迎.数据显示,全球范围内,约有6亿人使用思维导图这一工具,其用户涵盖众多领域,包括企业家.政府.公司.学术机构等. 而作为一款功能全面的专 ...

最新文章

  1. Lombok经常用,却不知道它的原理是什么
  2. MVP:界面与业务逻辑分离在Winform中的应用
  3. JDBC和Ibatis中的Date,Time,Timestamp处理
  4. H3C 以太网集线器
  5. java 实体类规范_实体类的规范
  6. C# 获取文件名相关函数
  7. eclipse配置tomcat,并部署一个Java web项目到tomcat上
  8. Scott Mitchell 的ASP.NET 2.0数据操作教程之九:跨页面的主/从报表
  9. 音视频基础之YUV格式
  10. mysql nlssort函数_Oracle中 nls_sort 和 nlssort 排序功能
  11. Type-C扩展坞自适应供电专利维权案例
  12. 联想笔记本触摸板失灵的一个原因及解决方法
  13. wekan 工具配置
  14. FPGA 光纤传输IP核的使用
  15. 基于SVM的数据分类预測——意大利葡萄酒种类识别
  16. java模拟人生世界冒险_《模拟人生3世界冒险》的冒险心得与注意点
  17. 椭圆检测 Arc Adjacency Matrix-Based Fast Ellipse Detection 代码和数据集使用教程
  18. java jnlp 运行_jnlp——通过浏览器直接执行java应用程序
  19. QT系统学习系列:1.2 ToolBar(工具栏)
  20. 【快乐摸鱼】— 用python开发益智游戏

热门文章

  1. Windows 7提示数据错误 循环冗余检查怎么办?
  2. python计算金星凌日
  3. 【PHP】面试经历总结之——新浪微博
  4. python连连看_Python-连连看
  5. 示波器的带宽与采样率是什么关系
  6. 国内手机市场寒风持续,华为与OV竞争将更激烈
  7. 百度api验证码识别
  8. 在WIN系统中直接安装黑苹果系统
  9. 英国留学生论文introduction部分怎么写比较好?
  10. 佳能打印服务 android,佳能打印机app