python圖像的批量處理怎么實現

蝸牛 互聯網技術資訊 2022-07-02 53 0

這篇文章主要介紹了python圖像的批量處理怎么實現的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇python圖像的批量處理怎么實現文章都會有所收獲,下面我們一起來看看吧。

圖片集合函數

skimage.io.ImageCollection(load_pattern,load_func=None)

這個函數是放在io模塊內的,帶兩個參數,第一個參數load_pattern, 表示圖片組的路徑,可以是一個str字符串。第二個參數load_func是一個回調函數,我們對圖片進行批量處理就可以通過這個回調函數實現?;卣{函數默認為imread(),即默認這個函數是批量讀取圖片。

先看一個例子:

import?skimage.io?as?io
from?skimage?import?data_dir
str=data_dir?+?'/*.png'
coll?=?io.ImageCollection(str)
print(len(coll))

顯示結果為25, 說明系統自帶了25張png的示例圖片,這些圖片都讀取了出來,放在圖片集合coll里。如果我們想顯示其中一張圖片,則可以在后加上一行代碼:

io.imshow(coll[10])

顯示為:

python圖像的批量處理怎么實現  python 第1張

批量讀取

如果一個文件夾里,我們既存放了一些jpg格式的圖片,又存放了一些png格式的圖片,現在想把它們全部讀取出來,該怎么做呢?

import?skimage.io?as?io
from?skimage?import?data_dir
str='d:/pic/*.jpg:d:/pic/*.png'
coll?=?io.ImageCollection(str)
print(len(coll))

注意這個地方'd:/pic/*.jpg:d:/pic/*.png' ,是兩個字符串合在一起的,

第一個是'd:/pic/*.jpg',

第二個是'd:/pic/*.png' ,

合在一起后,中間用冒號來隔開,這樣就可以把d:/pic/文件夾下的jpg和png格式的圖片都讀取出來。

如果還想讀取存放在其它地方的圖片,也可以一并加進去,只是中間同樣用冒號來隔開。

io.ImageCollection()這個函數省略第二個參數,就是批量讀取。如果我們不是想批量讀取,而是其它批量操作,如批量轉換為灰度圖,那又該怎么做呢?

批量轉換為灰度圖

那就需要先定義一個函數,然后將這個函數作為第二個參數,如:

from?skimage?import?data_dir,io,color
def?convert_gray(f):
????rgb=io.imread(f)
????return?color.rgb2gray(rgb)
str=data_dir+'/*.png'
coll?=?io.ImageCollection(str,load_func=convert_gray)
io.imshow(coll[10])

python圖像的批量處理怎么實現  python 第2張

這種批量操作對視頻處理是極其有用的,因為視頻就是一系列的圖片組合

from?skimage?import?data_dir,io,color
class?AVILoader:
????video_file?=?'myvideo.avi'
????def?__call__(self,?frame):
????????return?video_read(self.video_file,?frame)
avi_load?=?AVILoader()
frames?=?range(0,?1000,?10)?#?0,?10,?20,?...
ic?=io.ImageCollection(frames,?load_func=avi_load)

這段代碼的意思,就是將myvideo.avi這個視頻中每隔10幀的圖片讀取出來,放在圖片集合中。

得到圖片集合以后,我們還可以將這些圖片連接起來,構成一個維度更高的數組,連接圖片的函數為:

skimage.io.concatenate_images(ic)

帶一個參數,就是以上的圖片集合,如:

from?skimage?import?data_dir,io,color
coll?=?io.ImageCollection('d:/pic/*.jpg')
mat=io.concatenate_images(coll)

使用concatenate_images(ic)函數的前提是讀取的這些圖片尺寸必須一致,否則會出錯。我們看看圖片連接前后的維度變化:

from?skimage?import?data_dir,io,color
coll?=?io.ImageCollection('d:/pic/*.jpg')
print(len(coll))??????#連接的圖片數量
print(coll[0].shape)???#連接前的圖片尺寸,所有的都一樣
mat=io.concatenate_images(coll)
print(mat.shape)??#連接后的數組尺寸

顯示結果:

2
(870, 580, 3)
(2, 870, 580, 3)

可以看到,將2個3維數組,連接成了一個4維數組

如果我們對圖片進行批量操作后,想把操作后的結果保存起來,也是可以辦到的。

批量保存

例:把系統自帶的所有png示例圖片,全部轉換成256*256的jpg格式灰度圖,保存在d:/data/文件夾下

改變圖片的大小,我們可以使用tranform模塊的resize()函數,后續會講到這個模塊。

from?skimage?import?data_dir,io,transform,color
import?numpy?as?np
def?convert_gray(f):
?????rgb=io.imread(f)????#依次讀取rgb圖片
?????gray=color.rgb2gray(rgb)???#將rgb圖片轉換成灰度圖
?????dst=transform.resize(gray,(256,256))??#將灰度圖片大小轉換為256*256
?????return?dst
str=data_dir+'/*.png'
coll?=?io.ImageCollection(str,load_func=convert_gray)
for?i?in?range(len(coll)):
????io.imsave('d:/data/'+np.str(i)+'.jpg',coll[i])??#循環保存圖片

?結果:

python圖像的批量處理怎么實現  python 第3張

關于“python圖像的批量處理怎么實現”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“python圖像的批量處理怎么實現”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注蝸牛博客行業資訊頻道。

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:niceseo99@gmail.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

評論

日本韩欧美一级A片在线观看