日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

關于python中不同函數(shù)讀取圖片格式的區(qū)別淺析_python

作者:東寫西讀李老濕 ? 更新時間: 2022-05-19 編程語言

前言:關于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ù)運算中,如果不轉換成double格式,計算可能會產生溢出。

總之先記住一句話:uint8用來存儲和顯示(imshow),double用來運算。

一、skimage.io。

讀取方法: skimage.io.imread('圖片地址')

返回的格式是uint8格式的數(shù)組。

二、imageio

讀取方法: imageio.imread('圖片地址').

返回的格式是一個imageio.core.util.Image類,其里邊的元素也是uint8格式的。

以上兩種類型均可以通過skimage.img_as_float轉換成float64格式的圖片。

轉換公式為::

元素轉換前后對比: 67(uint8) →→→ 0.2627(float64)。

在程序中的相互轉換:

1)把uint8轉換成float

轉換成float64。只需要利用skimage.img_as_float()函數(shù)即可。

如果需要轉換成float32格式,在float64的基礎上加上:.astype(np.float32)即可。

示例:

img = skimage.img_as_float(img)#從uint8轉換成float364
img = skimage.img_as_float(img).astype(np.float32)#從uint8轉換成float32

2)把float64轉換成uint8

這是目前來說找到的既能達到目的又不使圖像失真的方法了:分別利用skimage包和numpy中的函數(shù)進行轉換,如果直接用numpy函數(shù)進行轉換,會使圖像失真。

img = skimage.img_as_float(img)#先轉換成uint16的格式。
img = np.uint8(img)#再轉換成uint8的格式。

總結:以上的轉換中可以看出:能用圖形處理包的格式轉換函數(shù)就別用numpy中的格式轉換函數(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處理圖像轉化為uint8格式

在python圖像處理過程中,遇到的RGB圖像的值是處于0-255之間的,為了更好的處理圖像,通常會將圖像值轉變到0-1之間

這個處理的過程就是圖像的uint8類型轉變?yōu)閒loat類型過程。img.astype('uint8')/255

float類型取值范圍 :-1 到1 或者 0到1

總結

原文鏈接:https://blog.csdn.net/u013044310/article/details/80739623

欄目分類
最近更新