關(guān)于python中不同函數(shù)讀取圖片格式的區(qū)別淺析
前言:關(guān)于uint8和float型數(shù)據(jù)
為了節(jié)省存儲空間,圖像一般存儲在一種特殊的數(shù)據(jù)類型——uint8(8位無符號整數(shù))中,以此方式存儲的圖像稱作8位圖像。
imread把灰度圖像存入一個8位矩陣,當為RGB圖像時,就存入8位RGB矩陣中。
因此,通過matlab以及各種python包(skimage,imageio)讀入圖像的數(shù)據(jù)類型都是uint8的,而在數(shù)據(jù)運算中,如果不轉(zhuǎn)換成double格式,計算可能會產(chǎn)生溢出。
總之先記住一句話:uint8用來存儲和顯示(imshow),double用來運算。
一、skimage.io。
讀取方法: skimage.io.imread('圖片地址')
返回的格式是uint8格式的數(shù)組。
二、imageio
讀取方法: imageio.imread('圖片地址').
返回的格式是一個imageio.core.util.Image類,其里邊的元素也是uint8格式的。
以上兩種類型均可以通過skimage.img_as_float轉(zhuǎn)換成float64格式的圖片。
轉(zhuǎn)換公式為::
元素轉(zhuǎn)換前后對比: 67(uint8) →→→ 0.2627(float64)。
在程序中的相互轉(zhuǎn)換:
1)把uint8轉(zhuǎn)換成float
轉(zhuǎn)換成float64。只需要利用skimage.img_as_float()函數(shù)即可。
如果需要轉(zhuǎn)換成float32格式,在float64的基礎(chǔ)上加上:.astype(np.float32)即可。
示例:
img = skimage.img_as_float(img)#從uint8轉(zhuǎn)換成float364 img = skimage.img_as_float(img).astype(np.float32)#從uint8轉(zhuǎn)換成float32
2)把float64轉(zhuǎn)換成uint8
這是目前來說找到的既能達到目的又不使圖像失真的方法了:分別利用skimage包和numpy中的函數(shù)進行轉(zhuǎn)換,如果直接用numpy函數(shù)進行轉(zhuǎn)換,會使圖像失真。
img = skimage.img_as_float(img)#先轉(zhuǎn)換成uint16的格式。 img = np.uint8(img)#再轉(zhuǎn)換成uint8的格式。
總結(jié):以上的轉(zhuǎn)換中可以看出:能用圖形處理包的格式轉(zhuǎn)換函數(shù)就別用numpy中的格式轉(zhuǎn)換函數(shù),否則會出現(xiàn)各種各樣的問題。
附:不同數(shù)據(jù)類型的對比:
| Data type | range |
|---|---|
| uint8 | 0 to 255 |
| uint16 | 0 to 65535 |
| uint32 | 0 to 232 |
| float | -1 to 1 or 0 to 1 |
| int8 | -128 to 127 |
| int16 | -32768 to 32767 |
| int32 | -231 to 231 - 1 |
補充:python處理圖像轉(zhuǎn)化為uint8格式
在python圖像處理過程中,遇到的RGB圖像的值是處于0-255之間的,為了更好的處理圖像,通常會將圖像值轉(zhuǎn)變到0-1之間
這個處理的過程就是圖像的uint8類型轉(zhuǎn)變?yōu)閒loat類型過程。img.astype('uint8')/255
float類型取值范圍 :-1 到1 或者 0到1

總結(jié)
到此這篇關(guān)于python中不同函數(shù)讀取圖片格式的區(qū)別的文章就介紹到這了,更多相關(guān)python讀取圖片格式的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python最大連續(xù)區(qū)間和動態(tài)規(guī)劃
這篇文章主要介紹了Python最大連續(xù)區(qū)間和動態(tài)規(guī)劃,文章圍繞Python最大連續(xù)區(qū)間和動態(tài)規(guī)劃的相關(guān)資料展開內(nèi)容,需要的小伙伴可以參考一下2022-01-01
Python實戰(zhàn)之實現(xiàn)獲取動態(tài)圖表
這篇文章主要介紹了利用Python實現(xiàn)動態(tài)化圖表,文中的示例代碼介紹詳細,對我們的工作或?qū)W習有一定的價值,感興趣的同學可以學習一下2021-12-12
人工智能最火編程語言 Python大戰(zhàn)Java!
開發(fā)者到底應該學習哪種編程語言才能獲得機器學習或數(shù)據(jù)科學這類工作呢?這是一個非常重要的問題。本文為大家提供作者的答案并解釋原因2017-11-11
python3 pandas 讀取MySQL數(shù)據(jù)和插入的實例
下面小編就為大家分享一篇python3 pandas 讀取MySQL數(shù)據(jù)和插入的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04

