為什麼要盡量使用Tensorflow的圖像操作功能
因為Tensorflow對GPU的支援度高,盡量完全使用Tensorflow內建的圖像操作功能對圖像做操作,可以避免資料在GPU和CPU之間轉換。
將資料集轉為dataset
可以使用 TensorFlow 的 tf.data.Dataset API 將訓練圖像和標籤轉換為數據集。
首先,需要將訓練圖像和標籤轉換為 TensorFlow 張量:
import tensorflow as tf # Convert training images to tensors train_images_tensor = tf.convert_to_tensor(train_images, dtype=tf.float32) # Convert training labels to tensors train_labels_tensor = tf.convert_to_tensor(train_labels, dtype=tf.int64)
然後,使用 tf.data.Dataset.from_tensor_slices 方法將張量轉換為數據集:
# Create a dataset from tensors dataset = tf.data.Dataset.from_tensor_slices((train_images_tensor, train_labels_tensor))
使用 tf.data.Dataset 中的方法對數據集進行轉換和操作,例如混淆、重新排列和批次化。例如,要將數據集混淆並分成小批次
# Shuffle and batch the dataset dataset = dataset.shuffle(buffer_size=1024).batch(32)
將BGR的tensor物件轉為灰階
可以使用rgb_to_grayscale
將 BGR 格式的圖片轉換為灰階:
import tensorflow as tf # 讀取圖片並解碼為張量 image = tf.image.decode_jpeg(image_data) # 將圖片轉換為灰階 image = tf.image.rgb_to_grayscale(image) # 將圖片的數據型別轉換為浮點數 image = tf.image.convert_image_dtype(image, tf.float32)
在 TensorFlow 中,通常會將圖片的數據型別轉換為浮點數,因為浮點數能夠提供更大的精度和更多的值域。浮點數通常用於訓練模型和進行數值運算。
例如,在進行影像辨識任務時,您可能會將圖片的像素值轉換為浮點數,以便模型能夠更好地學習圖片中的特徵。同樣地,在進行數值運算時,浮點數也能夠提供更高的精度,以便得到更精確的結果。
注意:不同的數據型別有不同的值域和精度,因此在選擇數據型別時,需要考慮您的應用程序的需求
將灰階圖片轉成黑白
使用以下方法將灰階圖片轉換為黑白圖片(類似 OpenCV 的 threshold):
import tensorflow as tf # 讀取圖片並轉換為灰階 image = tf.image.rgb_to_grayscale(image) # 設定閾值並將圖片轉換為黑白圖片 threshold = 128 image = tf.cast(image > threshold, tf.float32)
我們先設定閾值(在這裡設為 128),然後將圖片中的像素值與閾值進行比較。如果像素值大於閾值,則轉換為 1(黑色);否則轉換為 0(白色)。
載入圖片
使用 tf.io.read_file
函數讀取 JPEG 圖片,然後使用 tf.image.decode_jpeg
函數解碼圖片。接著,使用 tf.image.convert_image_dtyp
e 函數將圖片轉換為 GPU 可處理的格式(通常是浮點數)。
import tensorflow as tf # 讀取 JPEG 圖片 image_raw = tf.io.read_file(image_path) image = tf.image.decode_jpeg(image_raw) # 將圖片轉換為 GPU 可處理的格式 image = tf.image.convert_image_dtype(image, tf.float32)
縮小圖片
import tensorflow as tf # 縮小圖片 image = tf.image.resize(image, (128, 128))
圖片改為灰階
import tensorflow as tf # 轉換為灰階 image = tf.image.rgb_to_grayscale(image)