【Python进阶】实战Python图形文件操作基本编程
歡迎來到專欄《Python進(jìn)階》。在這個專欄中,我們會講述Python的各種進(jìn)階操作,包括Python對文件、數(shù)據(jù)的處理,Python各種好用的庫如NumPy、Scipy、Matplotlib、Pandas的使用等等。我們的初心就是帶大家更好的掌握Python這門語言,讓它能為我所用。
今天是《Python進(jìn)階》專欄的第二期,在本期中,我們將主要介紹如何利用Python對圖像文件進(jìn)行一些處理。
作者&編輯 | 湯興旺
我們應(yīng)該都明白數(shù)據(jù)處理對于CV來說至關(guān)重要,今天我們不說數(shù)據(jù)增強(qiáng)等高大上的操作,我們來聊聊當(dāng)我們拿到圖片數(shù)據(jù)時如何對圖片數(shù)據(jù)進(jìn)行整理,如更改圖片文件格式和文件名等等。
1 遍歷圖片文件/文件夾
當(dāng)提到文件/文件夾遍歷時我們就不得不提python中的os.walk這個簡單易用的文件、目錄遍歷器。它可以幫助我們高效的處理文件、目錄方面的事情。話不多說,我們直接看代碼和具體用法。
現(xiàn)在我們有如下的文件結(jié)構(gòu):
我們看看如何通過os.walk來遍歷上面的這些圖片按和目錄。
import os
通過上面代碼如果我們輸出root即print(root),會得到下面的結(jié)果。
D:\file\kobe
D:\file\kobe\a
D:\file\kobe\b
D:\file\kobe\b\c
我們對照的看下輸出結(jié)果和文件結(jié)構(gòu),應(yīng)該明白了root實際上就是各個目錄(文件夾)的路徑,當(dāng)然這里是包括頂級目錄的,如我們這里的kobe文件夾。
我們再看看輸出dirs后的結(jié)果。
['a', 'b']
[]
['c']
[]
['a','b']實際上是root中第一個路徑(D:\file\kobe)中包含的文件夾,即kobe文件夾中的文件夾。第二行的輸出[]和第四行的輸出[]依次就是a文件夾和c文件夾中的包含的文件夾。由于a和c中都沒有文件夾,所以輸出都是[],第三行的['c']實際上是root中第三個路徑(D:\file\kobe\b)中包含的文件夾c文件夾。綜上分析我們知道dirs實際上就是root中的各個文件夾。
最后我們再看看files,顧名思義,這個files的輸出就是各個文件了,如下:
['kobe1.jpg', 'kobe2.jpg', 'kobe3.jpg', 'kobe4.jpg']
['kobe5.jpg']
[]
[]
參照root的輸出結(jié)果,上面的輸出依次就是kobe文件夾中的文件、a文件夾中的文件、b文件夾中的文件和c文件夾的文件。
通過上面的介紹,我相信你已經(jīng)明白了os.walk的具體用法和使用Python來遍歷圖片文件/文件夾了。
2 更改文件名字和格式
現(xiàn)在我們有個kobe文件夾,里面圖片如下:
現(xiàn)在我們需要將這五張圖片統(tǒng)一更改名稱和格式,更改后的格式如下KOBE_i.jpg,其中i為1-5。
import os
現(xiàn)在我們分析下上面的代碼。通過1.1的講解我相信你應(yīng)該知道root,dirs和files這三個變量里面的內(nèi)容了。那么srcname即os.path.join(root,f)又是什么呢?我先輸出下secname。結(jié)果如下:
D:\file\kobe\KOBE_1.png
D:\file\kobe\KOBE_2.png
D:\file\kobe\KOBE_3.png
D:\file\kobe\KOBE_4.png
D:\file\kobe\KOBE_5.png
很顯然,srcname就是每個圖片文件的名字。而root=D:\file\kobe,files=['KOBE_1.png', 'KOBE_2.png', 'KOBE_3.png', 'KOBE_4.png', 'KOBE_5.png']。相信你應(yīng)該知道os.path.join()的作用了,它實際上就是將join()里面參數(shù)拼接成一個完整的路徑。
3 將圖片路徑輸出到文本文件中
話不多說,我們直接上代碼,如下:
import osftxtfile = open(r"D:\file\a.txt",'w')? ftxtfile.write(os.path.join(rootDir, new_item )+ '\n')
我們通過上面的代碼就可以將圖片路徑輸出到.txt文件中。其實很簡單,首先通過open()打開txt文件,然后通過write()將需要寫入的內(nèi)容寫進(jìn)去就行了。下面就是寫入后的結(jié)果:
4 批量復(fù)制圖片文件
現(xiàn)在按照第三節(jié)中得到的txt文件中的內(nèi)容將圖片復(fù)制到另外一個文件夾中(D:\file\file\a),代碼如下:
import shutil
?print(obj_name_list)
在這個代碼中我們主要用到了shutil.copy()這個函數(shù),它的具體用法如下:
shutil.copy(source, destination) ,其中source/destination 都是字符串形式的路徑,source是原文件或者原文件夾的路徑。destination是目標(biāo)文件或者目標(biāo)文件夾的路徑 。
另外在這個代碼中我們定義了一個函數(shù)objFileName(),它的作用是將.txt文件中的圖像路徑轉(zhuǎn)化成一個list。你可以像上面代碼的加粗部分那樣進(jìn)行驗證。會得到如下結(jié)果。
['D:\\file\\kobe\\KOBE_1.png', 'D:\\file\\kobe\\KOBE_2.png', 'D:\\file\\kobe\\KOBE_3.png', 'D:\\file\\kobe\\KOBE_4.png', 'D:\\file\\kobe\\KOBE_5.png']
5?批量更改圖片文件尺寸
我們知道通常訓(xùn)練網(wǎng)絡(luò)結(jié)構(gòu)模型的時候,圖像的輸入大小需要保持一個定值,如224X224等。下面這個代碼就可以批量改變圖片大小到指定尺寸。
from PIL import Image
更改圖片大小前的樣式如下:
我們先看下代碼運(yùn)行后的結(jié)果,如下:
上面的代碼我們主要定義了一個將圖片大小resize到指定大小的convertpng函數(shù),這個函數(shù)總共有四個參數(shù),分別是pngfile,outdir和圖像需要更改的寬度和高度。其中pngfile就是需要更改大小的圖片文件,outdir是圖片更改大小后的保存路徑。
總結(jié)
本期我們介紹了如何使用Python對文件進(jìn)行處理,希望它對你在圖像數(shù)據(jù)處理方面有些幫助。
下期預(yù)告:Python庫NumPy的高級應(yīng)用
有三AI編程微信公眾號《三人行ToCode》
有三AI編程方面的微信公眾號《三人行ToCode》創(chuàng)建了,歡迎加入,希望大家能借助這個平臺,扎實自己的編程基礎(chǔ)。
轉(zhuǎn)載文章請后臺聯(lián)系
侵權(quán)必究
往期精選
【Python進(jìn)階】Python進(jìn)階專欄、編程與開源框架知識星球上線,等你來follow
【雜談】菜鳥誤入linux會有哪些慘痛的經(jīng)歷
【TensorFlow2.0】TensorFlow2.0專欄上線,你來嗎?
【TensorFlow2.0】以后我們再也離不開Keras了?
【TensorFlow2.0】數(shù)據(jù)讀取與使用方式
【TensorFlow2.0】如何搭建網(wǎng)絡(luò)模型
總結(jié)
以上是生活随笔為你收集整理的【Python进阶】实战Python图形文件操作基本编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【图像分割应用】医学图像分割小总结
- 下一篇: 【知识星球】有三AI编程与开源框架正式开