歡迎您光臨本站 註冊首頁

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

←手機掃碼閱讀     zmcjlove @ 2020-07-01 , reply:0

一 方式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,g,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,g,r = cv2.split(image)  #將圖像通道分離開   rgb_image = cv2.merge([r,g,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)

 

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

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

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

1.io.imread 讀出的圖片格式是uint8,value是numpy array 類型。對於RGB 圖片,圖像數據是以RGB 的格式進行存儲的。

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,g,r = cv2.split(image)  #將圖像通道分離開  rgb_image = cv2.merge([r,g,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)

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的讀取。如有謬誤,還請大家斧正。


   


[zmcjlove ] 淺談tensorflow 中的圖片讀取和裁剪方式已經有258次圍觀

http://coctec.com/docs/program/show-post-240536.html