最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用python如何刪除同一文件夾下相似的圖片

 更新時間:2021年05月07日 11:03:32   作者:MHyourh  
這篇文章主要給大家介紹了關(guān)于利用python如何刪除同一文件夾下相似的圖片的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

最近整理圖片發(fā)現(xiàn),好多圖片都非常相似,于是寫如下代碼去刪除,有兩種方法:

注:第一種方法只對于連續(xù)圖片(例一個視頻里截下的圖片)準確率也較高,其效率高;第二種方法準確率高,但效率低

方法一:相鄰兩個文件比較相似度,相似就把第二個加到新列表里,然后進行新列表去重,統(tǒng)一刪除。

例如:有文件1-10,首先1和2相比較,若相似,則把2加入到新列表里,再接著2和3相比較,若不相似,則繼續(xù)進行3和4比較…一直比到最后,然后刪除新列表里的圖片

代碼如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import cv2
from skimage.measure import compare_ssim
# import shutil
# def yidong(filename1,filename2):
#     shutil.move(filename1,filename2)
def delete(filename1):
    os.remove(filename1)
if __name__ == '__main__':
    path = r'D:\camera_pic\test\rec_pic'
    # save_path_img = r'E:\0115_test\rec_pic'
    # os.makedirs(save_path_img, exist_ok=True)
    img_path = path
    imgs_n = []
    num = []
    img_files = [os.path.join(rootdir, file) for rootdir, _, files in os.walk(path) for file in files if
                 (file.endswith('.jpg'))]
    for currIndex, filename in enumerate(img_files):
        if not os.path.exists(img_files[currIndex]):
            print('not exist', img_files[currIndex])
            break
        img = cv2.imread(img_files[currIndex])
        img1 = cv2.imread(img_files[currIndex + 1])
        ssim = compare_ssim(img, img1, multichannel=True)
        if ssim > 0.9:
            imgs_n.append(img_files[currIndex + 1])
            print(img_files[currIndex], img_files[currIndex + 1], ssim)
        else:
            print('small_ssim',img_files[currIndex], img_files[currIndex + 1], ssim)
        currIndex += 1
        if currIndex >= len(img_files)-1:
            break
    for image in imgs_n:
        # yidong(image, save_path_img)
        delete(image)

方法二:逐個去比較,若相似,則從原來列表刪除,添加到新列表里,若不相似,則繼續(xù)

例如:有文件1-10,首先1和2相比較,若相似,則把2在原列表刪除同時加入到新列表里,再接著1和3相比較,若不相似,則繼續(xù)進行1和4比較…一直比,到最后一個,再繼續(xù),正常應該再從2開始比較,但2被刪除了,所以從3開始,繼續(xù)之前的操作,最后把新列表里的刪除。

代碼如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import cv2
from skimage.measure import compare_ssim
import shutil
import datetime
def yidong(filename1,filename2):
    shutil.move(filename1,filename2)
def delete(filename1):
    os.remove(filename1)
    print('real_time:',now_now-now)
if __name__ == '__main__':
    path = r'F:\temp\demo'
    # save_path_img = r'F:\temp\demo_save'
    # os.makedirs(save_path_img, exist_ok=True)
    for (root, dirs, files) in os.walk(path):
        for dirc in dirs:
            if dirc == 'rec_pic':
                pic_path = os.path.join(root, dirc)
                img_path = pic_path
                imgs_n = []
                num = []
                del_list = []
                img_files = [os.path.join(rootdir, file) for rootdir, _, files in os.walk(img_path) for file in files if
                             (file.endswith('.jpg'))]
                for currIndex, filename in enumerate(img_files):
                    if not os.path.exists(img_files[currIndex]):
                        print('not exist', img_files[currIndex])
                        break
                    new_cur = 0
                    for i in range(10000000):
                        currIndex1 =new_cur
                        if currIndex1 >= len(img_files) - currIndex - 1:
                            break
                        else:
                            size = os.path.getsize(img_files[currIndex1 + currIndex + 1])
                            if size < 512:
                                # delete(img_files[currIndex + 1])
                                del_list.append(img_files.pop(currIndex1 + currIndex + 1))
                            else:
                                img = cv2.imread(img_files[currIndex])
                                img = cv2.resize(img, (46, 46), interpolation=cv2.INTER_CUBIC)
                                img1 = cv2.imread(img_files[currIndex1 + currIndex + 1])
                                img1 = cv2.resize(img1, (46, 46), interpolation=cv2.INTER_CUBIC)
                                ssim = compare_ssim(img, img1, multichannel=True)
                                if ssim > 0.9:
                                    # imgs_n.append(img_files[currIndex + 1])
                                    print(img_files[currIndex], img_files[currIndex1 + currIndex + 1], ssim)
                                    del_list.append(img_files.pop(currIndex1 + currIndex + 1))
                                    new_cur = currIndex1
                                else:
                                    new_cur = currIndex1 + 1
                                    print('small_ssim',img_files[currIndex], img_files[currIndex1 + currIndex + 1], ssim)
                for image in del_list:
                    # yidong(image, save_path_img)
                    delete(image)
                    print('delete',image)

總結(jié)

到此這篇關(guān)于使用python如何刪除同一文件夾下相似圖片的文章就介紹到這了,更多相關(guān)python刪除文件夾相似圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Python實現(xiàn)Office文檔(Word/Excel/PowerPoint)批量轉(zhuǎn)換為PDF

    使用Python實現(xiàn)Office文檔(Word/Excel/PowerPoint)批量轉(zhuǎn)換為PDF

    在處理不同格式的Office文檔(如Word、Excel和PowerPoint)時,將其轉(zhuǎn)換為PDF格式是常見的需求,本文就跟隨小編來看看如何使用Python將Word/Excel/PowerPoint批量轉(zhuǎn)換為PDF吧
    2024-10-10
  • Django如何實現(xiàn)RBAC權(quán)限管理

    Django如何實現(xiàn)RBAC權(quán)限管理

    這篇文章主要介紹了Django如何實現(xiàn)RBAC權(quán)限管理問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python基于BeautifulSoup實現(xiàn)抓取網(wǎng)頁指定內(nèi)容的方法

    python基于BeautifulSoup實現(xiàn)抓取網(wǎng)頁指定內(nèi)容的方法

    這篇文章主要介紹了python基于BeautifulSoup實現(xiàn)抓取網(wǎng)頁指定內(nèi)容的方法,涉及Python使用BeautifulSoup模塊解析html網(wǎng)頁的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 使用 Python 的 pprint庫格式化和輸出列表和字典的方法

    使用 Python 的 pprint庫格式化和輸出列表和字典的方法

    pprint是"pretty-print"的縮寫,使用 Python 的標準庫 pprint 模塊,以干凈的格式輸出和顯示列表和字典等對象,這篇文章主要介紹了如何使用 Python 的 pprint庫格式化和輸出列表和字典,需要的朋友可以參考下
    2023-05-05
  • 關(guān)于pytorch求導總結(jié)(torch.autograd)

    關(guān)于pytorch求導總結(jié)(torch.autograd)

    這篇文章主要介紹了關(guān)于pytorch求導總結(jié)(torch.autograd),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • python實現(xiàn)查詢IP地址所在地

    python實現(xiàn)查詢IP地址所在地

    本文給大家分享的是使用Python實現(xiàn)根據(jù)ip138的API查詢IP的地理位置的代碼,非常的實用,推薦給大家,有需要的小伙伴可以參考下。
    2015-03-03
  • TensorFlow索引與切片的實現(xiàn)方法

    TensorFlow索引與切片的實現(xiàn)方法

    這篇文章主要介紹了TensorFlow索引與切片的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • 解析Python中的生成器及其與迭代器的差異

    解析Python中的生成器及其與迭代器的差異

    生成器是一種特殊的迭代器,而反過來說則就不對了,迭代器在Python中是一個更抽象的概念,以下我們就來詳細解析Python中的生成器及其與迭代器的差異
    2016-06-06
  • TensorFlow 顯存使用機制詳解

    TensorFlow 顯存使用機制詳解

    今天小編就為大家分享一篇TensorFlow 顯存使用機制詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python使用Geany編輯器配置方法

    python使用Geany編輯器配置方法

    這篇文章主要介紹了python使用Geany編輯器配置方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02

最新評論

尤溪县| 江华| 双桥区| 江津市| 兴安盟| 宁陵县| 包头市| 晋城| 长沙县| 托里县| 绥宁县| 平南县| 南陵县| 绥江县| 诸城市| 博兴县| 横山县| 中阳县| 鱼台县| 太湖县| 安泽县| 曲靖市| 绥滨县| 宁津县| 淮安市| 大丰市| 葵青区| 青田县| 陆川县| 马公市| 高陵县| 崇义县| 沂水县| 三原县| 新丰县| 岳阳市| 庆云县| 宽甸| 奉新县| 灵宝市| 当阳市|