1. 程式人生 > >io.imread和cv2.imread以及 transform.resize和cv2.resize區別

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,具體程式碼如下。

  1. import cv2

  2. import matplotlib.pyplot as plt

  3. from skimage import transform

  4. import numpy as np

  5. import skimage.io as io

  6. train_dir = 'E:/TensorFlow/Project_TF/flower_tfrecord/data/test/roses/timg.jpg'

  7. '''以cv2方式讀取圖片'''

  8. image=cv2.imread(train_dir)

  9. b,g,r = cv2.split(image) #將影象通道分離開

  10. rgb_image = cv2.merge([r,g,b]) #以RGB的形式重新組合

  11. #image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) 也可以使用這個函式直接轉換成RGB 形式

  12. plt.imshow(rgb_image)

  13. '''以io.imread方式讀取圖片'''

  14. #image = io.imread(train_dir) #讀圖並顯示

  15. #plt.imshow(image)

  • 1

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

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

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

  1. '''以io.imread方式讀取圖片並使用transform形式裁剪圖片'''

  2. image = io.imread(train_dir) #讀圖並顯示

  3. plt.imshow(image)

  4. image =transform.resize(image, (208, 208))

  5. img = image * 255 #將圖片的取值範圍改成(0~255)

  6. img = img.astype(np.uint8)

  7. plt.imshow(img)

  • 1

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,具體程式碼如下。

  1. import cv2

  2. import matplotlib.pyplot as plt

  3. from skimage import transform

  4. import numpy as np

  5. import skimage.io as io

  6. train_dir = 'E:/TensorFlow/Project_TF/flower_tfrecord/data/test/roses/timg.jpg'

  7. '''以cv2方式讀取圖片'''

  8. image=cv2.imread(train_dir)

  9. b,g,r = cv2.split(image) #將影象通道分離開

  10. rgb_image = cv2.merge([r,g,b]) #以RGB的形式重新組合

  11. #image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) 也可以使用這個函式直接轉換成RGB 形式

  12. plt.imshow(rgb_image)

  13. '''以io.imread方式讀取圖片'''

  14. #image = io.imread(train_dir) #讀圖並顯示

  15. #plt.imshow(image)

  • 1

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

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

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

  1. '''以io.imread方式讀取圖片並使用transform形式裁剪圖片'''

  2. image = io.imread(train_dir) #讀圖並顯示

  3. plt.imshow(image)

  4. image =transform.resize(image, (208, 208))

  5. img = image * 255 #將圖片的取值範圍改成(0~255)

  6. img = img.astype(np.uint8)

  7. plt.imshow(img)

  • 1

--------------------- 本文來自 ChuShengWHU 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/qq_23589775/article/details/81143584?utm_source=copy