栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python计算图片相似度_python库比较图片相似度?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python计算图片相似度_python库比较图片相似度?

一.首先导入模块

import difflib
import os
import os.path

二.设置txt文件

txt = '图片路径.txt'  #将放置文件命名的txt设置

三.自主输入目标文件夹所在路径

def ReadPictureName():     #设置读取图片所在路径并询问是否打开函数
    read = input('请输入图片文件路径:n')
    if read != '':   #对输入为空的表达
        cho = input('是否选择打开文件夹?y/n:n')
        if cho == 'y' or cho == 'Yes' or cho == 'Y':
            try:
                os.startfile(read)    #使用os指令询问是否打开
            except FileNotFoundError:
                print('未找到该路径,无法打开文件')
            start = read    #对输入路径进行捕获并传导到下一函数
        else:
            start = read
        try:
            WritePictureName(start)
        except FileNotFoundError:  #对错误捕获
            print('请重新输入路径')
            ReadPictureName()
    else:
        print('请输入正确路径')
        ReadPictureName()

四.对目标文件命名写入txt内

def WritePictureName(start):   #对捕获路径内的图片命名写入txt内
    Targetpath = start
    stu_txt = open('图片路径.txt', 'w', encoding='utf-8')  #w:打开一个文件只用于写入。并从开头开始编辑,即原有内容会被删除
    hunter = os.listdir(Targetpath)   #捕获文件命名
    if hunter == []:   #对文件内为空返回上一函数
        print('该目录为空')
        again = input('是否重新输入?y/n:n')
        if again == 'y' or again == 'Yes' or again == 'Y':
            ReadPictureName()
        else:
            return
    else:
        for i in range(len(hunter)):  #使用遍历方式写入txt文件
            s = hunter[i] + 'n'
            stu_txt.write(s)
        stu_txt.close()

五.对txt文件读取并进行对比

def Namecomparison(txt):   #对txt文件内容进行读取
    while True:
        if os.path.exists(txt):
            with open(txt, 'r', encoding='utf-8') as rf:
                cc = rf.readlines()
                a = cc
                Way(a)
                break
        else:
            print('已退出')


def Way(a):  #对图片进行相似度对比
    b = a
    i = 0
    j = 0
    try:
        d = float(input('请输入最低对比程度:(0-1,不包含1)n')) #对比程度进行设置
        if d > 1:
            print('超出范围,重新输入')
            Way(a)
    except:
        print('输入错误')
        Way(a)
    while (i < len(a)):
        while (j < len(a)):
            c = difflib.SequenceMatcher(None, a[i], b[j]).quick_ratio()  #对比字符相似度
            if d < c < 1:
                x = (a[i], b[j])
                print(x)
                j += 1
            else:
                j += 1
        if j == len(a):
            j = i + 2
            i += 1
        elif j == len(a) and i == len(a):
            break

六.主函数运行

if __name__ == '__main__':   #主函数设置
    ReadPictureName()    #首先运行函数
    Namecomparison(txt)
    while True:   #对函数是否继续运行
        again = input('是否再次输入图片文件路径y/n:n')
        if again == 'y' or again == 'Yes' or again == 'Y':
            ReadPictureName()
            Namecomparison(txt)
            continue
        else:
            print('结束程序')
            exit()

七.完整代码

import difflib
import os
import os.path

txt = '图片路径.txt'  #将放置文件命名的txt设置


def ReadPictureName():     #设置读取图片所在路径并询问是否打开函数
    read = input('请输入图片文件路径:n')
    if read != '':   #对输入为空的表达
        cho = input('是否选择打开文件夹?y/n:n')
        if cho == 'y' or cho == 'Yes' or cho == 'Y':
            try:
                os.startfile(read)    #使用os指令询问是否打开
            except FileNotFoundError:
                print('未找到该路径,无法打开文件')
            start = read    #对输入路径进行捕获并传导到下一函数
        else:
            start = read
        try:
            WritePictureName(start)
        except FileNotFoundError:  #对错误捕获
            print('请重新输入路径')
            ReadPictureName()
    else:
        print('请输入正确路径')
        ReadPictureName()


def WritePictureName(start):   #对捕获路径内的图片命名写入txt内
    Targetpath = start
    stu_txt = open('图片路径.txt', 'w', encoding='utf-8')  #w:打开一个文件只用于写入。并从开头开始编辑,即原有内容会被删除
    hunter = os.listdir(Targetpath)   #捕获文件命名
    if hunter == []:   #对文件内为空返回上一函数
        print('该目录为空')
        again = input('是否重新输入?y/n:n')
        if again == 'y' or again == 'Yes' or again == 'Y':
            ReadPictureName()
        else:
            return
    else:
        for i in range(len(hunter)):  #使用遍历方式写入txt文件
            s = hunter[i] + 'n'
            stu_txt.write(s)
        stu_txt.close()


def Namecomparison(txt):   #对txt文件内容进行读取
    while True:
        if os.path.exists(txt):
            with open(txt, 'r', encoding='utf-8') as rf:
                cc = rf.readlines()
                a = cc
                Way(a)
                break
        else:
            print('已退出')


def Way(a):  #对图片进行相似度对比
    b = a
    i = 0
    j = 0
    try:
        d = float(input('请输入最低对比程度:(0-1,不包含1)n')) #对比程度进行设置
        if d > 1:
            print('超出范围,重新输入')
            Way(a)
    except:
        print('输入错误')
        Way(a)
    while (i < len(a)):
        while (j < len(a)):
            c = difflib.SequenceMatcher(None, a[i], b[j]).quick_ratio()  #对比字符相似度
            if d < c < 1:
                x = (a[i], b[j])
                print(x)
                j += 1
            else:
                j += 1
        if j == len(a):
            j = i + 2
            i += 1
        elif j == len(a) and i == len(a):
            break

八.运行结果

1.目标文件

 

 2.运行结果

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782975.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号