圖片批處理|必備小技能

微信公衆號:*AI算法與圖像處理
關注可瞭解更多的編程小技巧和優質資源。問題或建議,請公衆號留言;
若是你以爲Md2All對你有幫助,歡迎 好看和分享哈python

內容目錄(由[TOC]自動生成)

圖片批處理 簡介具體事項1)分析文件的存儲狀況2)試着分析好,如今很清晰了,是時候準備一些東西了代碼實現輸出結果:此時已經獲取圖片的名字和地址——能夠開始幹活了結果展現git

圖片批處理 簡介

圖片批處理操做或者說數據的批處理在這個數據爆炸的時代常常會用到,除了特殊的狀況,不然咱們不會想着靠人力去一個一個的完成數據的處理(土法煉鋼?),所以交給咱們的苦力——電腦。
明確目標:把時間拿來作有價值的事情
思路:
1.批量讀取文件
2.批量處理文件
3.批量存儲文件
簡稱——3P操做?粗鄙之語。。。github

具體事項

1)分析文件的存儲狀況

看一下文件的存儲是什麼鬼樣子的
算法


0文件夾下在3個小文件夾(比較常見的狀況)


在每一個次級文件夾(例如1_1文件夾)下存儲着圖片

看完腦袋痛! 編程

2)試着分析

說明:爲了方便理解,我將文件夾命名的比較有規律,從0開始往下一級加1微信

(1)批量讀取文件 轉化爲——三步走:app

A)定位到第一級文件夾(0)位置
B)讀取次級文件夾(1_1,1_2,1_3)名字
C)讀取次級文件夾下的圖片(或者數據)名字spa

好,如今很清晰了,是時候準備一些東西了

A)導入庫
Os ——操做系統功能的接口
Tqdm ——加個進度條,方便裝逼,不,是查看執行狀況
cv2 ——對圖片進行一些操做,讀取存儲和變化等 操作系統

B)圖片準備
這裏在每一個文件夾下放兩張 3d

(2)批量處理圖片

這裏你能夠添加各類本身喜歡的掃操做,只要不違法,隨便怎麼搞,爲了簡單起見,我不搞花裏胡哨的,在代碼中用了灰度變化操做

(3)批量存儲文件

理解了批量讀取文件,實際上批量存儲文件相似的

代碼實現

'''
批量讀取文件()
'''

import os
from tqdm import tqdm

'''
1.設置必要的讀取路徑和存儲路徑
'''

# path = os.getcwd() # 獲取當前路徑
# 處理的圖片不是在當前文件下,能夠直接添加絕對路徑
path = '/media/pzw/0E50196C0E50196C/weixin/MultiProcess/0'
## print(path) # 習慣每步都確認一哈有沒有出錯,你們能夠直接忽略
dst_path = '/media/pzw/0E50196C0E50196C/weixin/MultiProcess' # 處理完成後的圖片存儲位置

'''
2.進入次級文件夾並讀取文件
'''

dir_names = os.listdir(path)    # 讀取次級文件夾名字
# print(dir_names)
for dir in tqdm(dir_names):
    path_1 = os.path.join(path, dir) # 獲取次級文件夾的路徑 ||次級1開頭
    # print(path_1)
    pic_names = os.listdir(path_1)    #讀取圖片的名字
    print(pic_names)
複製代碼

輸出結果:

100%|██████████| 3/3 [00:00<00:00, 5863.43it/s]
['1_1_1.jpg', '1_1_2.jpg']
['1_2_1.jpg', '1_2_2.jpg']
['1_3_1.jpg', '1_3_2.jpg']

此時已經獲取圖片的名字和地址——能夠開始幹活了

接下的工做都是至關於對單張圖片進行操做了,由於咱們循環到最底層(可能表述的不是很準確,大概意思是找到圖片了,想怎麼搞怎麼搞瞭如今)
代碼給大家了,註釋的很清楚了哈!!!

import os
import cv2
from tqdm import tqdm
'''
1.設置必要的讀取路徑和存儲路徑
'''

# path = os.getcwd() # 獲取當前路徑
# 處理的圖片不是在當前文件下,能夠直接添加絕對路徑
path = '/media/pzw/0E50196C0E50196C/weixin/MultiProcess/0'   # 第一級文件夾 0 開頭
## print(path) # 習慣每步都確認一哈有沒有出錯,你們能夠直接忽略
dst_path0 = '/media/pzw/0E50196C0E50196C/weixin/MultiProcess/0_pro' # 處理完成後的圖片存儲位置
'''
2.進入次級文件夾並讀取文件
'''

dir_names = os.listdir(path)    # 讀取次級文件夾名字
# print(dir_names)
# tqdm是爲了顯示當前讀取到第n個文件夾了,固然能夠換到其餘位置,不瞭解的小夥伴看以前的文章哈
for dir in tqdm(dir_names):
    path_1 = os.path.join(path, dir) # 獲取次級文件夾的路徑 ||次級1開頭
    # print(path_1)
    pic_names = os.listdir(path_1)    #讀取圖片的名字
    # print(pic_names)
    dst_path1 = os.path.join(dst_path0,dir) # 對應的次級存儲路徑
    '''
    3.對圖片進行操做
    此時能夠認爲是在單獨一個文件裏面的操做,這個文件夾內操做完成以後,
    便會執行下一個文件夾,這樣子就很好理解怎麼作
    這段話放在這裏可能會影響你們理解,可是是爲了告訴你們思路哈。讀代碼的時候能夠刪了
    '''

    for pic_name in pic_names:
        new_path = os.path.join(path_1, pic_name)
        # print(new_path) # 圖片的讀取路徑
        dst_pic_name = pic_name.split('.')[0]+'>_<.jpg' # 對處理完的圖片名字進行修改,比較被修理以後會哭的
        # print(dst_pic_name)
        dst_path = os.path.join(dst_path1, dst_pic_name)
        # print(dst_path)
        # 讀取圖片
        img_0 = cv2.imread(new_path, cv2.IMREAD_GRAYSCALE) # 變成灰度圖
        # 這裏能夠添加大家想要的操做,裁剪,變換等等
        # 判斷存儲路徑是否存在,不存在,建立新路徑
        isExists = os.path.exists(dst_path1)
        if not isExists:
            os.makedirs(dst_path1)
        cv2.imwrite(dst_path, img_0)
複製代碼

結果展現

文件夾名字、圖片名字以及圖片都變了,說明,我曹,老子竟然成功運行了。。。。

爲了方便你們獲取代碼,代碼已經加入肯德基豪華套餐了。what?

不,已經放在github上面了

github.com/SCUTPZW/AI_…

代碼編寫不易,這些是我本身看了不少人代碼,慢慢踩的坑,可能不是效率最高的,可是我但願這個思路可以對你們有所幫助,固然也歡迎你們提一哈建議,一塊兒共同成長。

可否求一波小小的右下角和大大的分享,很是感謝,這段寫推文的日子,感觸良多,下班後竟然不玩遊戲,不刷視頻,寫寫推文一會兒一夜就過去了,很充實。公衆號推廣的時候很心酸,可能會受那些大號主的鄙視嘲諷,固然也有一塊兒成長小夥伴的友情分享和鼓勵,但我以爲沒事,人就應該是在別人的打擊下更增強大本身的心裏,在朋友的鼓勵下更加堅決地前行。

有個小夥伴,初試完很憂傷,擔憂考不上,也懼怕調劑也上不了理想的學校。我就是調劑過來的,明白那種痛苦,真心但願你應該要自信,把這種不如意的日子當作是生活對你的考驗,也許如今我也是在接受這這種考驗,咱們都應該堅持,或許堅持下來的結果不必定是你想要的,可是你獲得那種堅持自個人韌性是你意想不到的寶貴財富。

加油!!!對你說,也對我本身說,哈哈哈,小老闆多撈哦!

相關文章
相關標籤/搜索