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