1. 程式人生 > 程式設計 >淺談tensorflow 中的圖片讀取和裁剪方式

淺談tensorflow 中的圖片讀取和裁剪方式

一 方式1: skimage

from skimage import data,io,transform,color 
import matplotlib.pyplot as plt 
 
# io.imread 讀出的圖片格式是uint8,value是numpy array 型別。
image = data.coffee()
image = io.imread(dir)
 
plt.imshow(image)
plt.show()
 
io.save('1.jpg',image) #儲存影象
 
image_gray = color.rgb2gray(image) #轉換為灰度影象
io.save('2.jpg',image_gray)
 
# 通過transform.resize()裁剪後的圖片是以 float64的格式儲存的,數值的取值範圍是(0~1)
image_ = transform.resize(image,(200,200))
img = image_ * 255 #將圖片的取值範圍改成(0~255)
img = img.astype(np.uint8) 
img = image_ * 255 #將圖片的取值範圍改成(0~255)
img = img.astype(np.uint8) 

二、方式2:cv2

import cv2
import matplotlib.pyplot as plt 
 
# cv2.imread讀出的圖片格式是uint8,value也是numpy array 型別。
# 影象資料格式是以BGR的格式進行儲存的。需要將儲存型別改成RGB 的形式才能正常顯示原圖的顏色。
image=cv2.imread(dir) 
b,g,r = cv2.split(image)  #將影象通道分離開 
rgb_image = cv2.merge([r,b]) #以RGB的形式重新組合 
#image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB) 也可以使用這個函式直接轉換成RGB 形式 
plt.imshow(rgb_image) 
 
# 通過cv2.resize()裁剪後的圖片還是以 numpy array 的方式儲存的, 數值的取值範圍是(0~255)
image_cv2 = cv2.resize(rgb_image)
 
image=cv2.imread(dir) 
b,cv2.COLOR_BGR2RGB) 也可以使用這個函式直接轉換成RGB 形式 
plt.imshow(rgb_image) 

# 通過cv2.resize()裁剪後的圖片還是以 numpy array 的方式儲存的, 數值的取值範圍是(0~255)
image_cv2 = cv2.resize(rgb_image)

補充知識:tensorflow中兩種讀圖及裁剪圖片的區別(io.imread和cv2.imread)以及(transform.resize和cv2.resize)

Tensorflow中,在訓練圖片資料之前,需要先對圖片進行預處理,讀圖和裁剪是最基本的兩步。常見的的讀圖何裁剪分別有兩種方式,這裡小編將和大家分享下這幾種方式的實現以及他們之間的區別。

一、常見的兩種讀圖方式 io.imread() 和 cv2.imread()

1.io.imread 讀出的圖片格式是uint8,value是numpy array 型別。對於RGB 圖片,影象資料是以RGB 的格式進行儲存的。

淺談tensorflow 中的圖片讀取和裁剪方式

2.cv2.imread讀出的圖片格式是uint8,value也是numpy array 型別。唯一的區別是,影象資料格式是以BGR的格式進行儲存的。需要將儲存型別改成RGB 的形式才能正常顯示原圖的顏色。特別是製作tfrecord 時,需要將圖片通道改成RGB,具體程式碼如下。

import cv2
import matplotlib.pyplot as plt
from skimage import transform 
import numpy as np
import skimage.io as io 
 
train_dir = 'E:/TensorFlow/Project_TF/flower_tfrecord/data/test/roses/timg.jpg'
 
'''以cv2方式讀取圖片'''
image=cv2.imread(train_dir)
b,r = cv2.split(image)  #將影象通道分離開
rgb_image = cv2.merge([r,b]) #以RGB的形式重新組合
 
#image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB) 也可以使用這個函式直接轉換成RGB 形式
plt.imshow(rgb_image)
 
'''以io.imread方式讀取圖片'''
#image = io.imread(train_dir) #讀圖並顯示 
#plt.imshow(image)

二、常見的兩種圖片裁剪方式 cv2.resize() 和 transform.resize()

1.通過cv2.resize()裁剪後的圖片還是以 numpy array 的方式儲存的, 數值的取值範圍是(0~255)

淺談tensorflow 中的圖片讀取和裁剪方式

2.通過transform.resize()裁剪後的圖片是以 float64的格式儲存的,數值的取值範圍是(0~1)。通常在製作tfrecord 資料集的過程中,我們需要將其轉換成numpy array的形式,具體程式碼如下

'''以io.imread方式讀取圖片並使用transform形式裁剪圖片'''
image = io.imread(train_dir) #讀圖並顯示 
plt.imshow(image)
image =transform.resize(image,(208,208))
img = image * 255 #將圖片的取值範圍改成(0~255)
img = img.astype(np.uint8) 
 
plt.imshow(img) 

讀圖和裁剪圖片在製作tfrecord資料集時,是很基礎的步驟,在接下來,我還將進一步更新如何製作自己的tfrecord資料集,以及tfrecord的讀取。如有謬誤,還請大家斧正。

以上這篇淺談tensorflow 中的圖片讀取和裁剪方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。