1. 程式人生 > >Tensorflow影象處理相關操作

Tensorflow影象處理相關操作

#對影象的處理
 
import matplotlib.pyplot as plt
import tensorflow as tf
 
#讀取影象的原始資料
image_raw_data=tf.gfile.FastGFile("./path/to/picture/timg.jpg",'rb').read()
 
with tf.Session() as sess:
    #將影象用jpeg格式解碼從而得到影象對應的三維矩陣,Tensorflow 還提供了tf.image_decode_png 函式對png格式的影象
    #機械性解碼。解碼之後的結果為一個張量
    img_data=tf.image.decode_jpeg(image_raw_data)
 
    print(img_data.eval())
 
    #使用pyplot工具視覺化得到的影象
    plt.imshow(img_data.eval())
    #plt.show()
 
    #將資料的型別轉化為實數,方便下面的程式進行處理
    img_data=tf.image.convert_image_dtype(img_data,dtype=tf.float32)
 
 
    #通過tf.image.resize_images函式調整影象的大小,method是調整的演算法,0:雙線性差值 1:最近鄰居法  2:雙3次差值法  3:面積差值法
    resized=tf.image.resize_images(img_data,[300,300],method=0)
    #輸出影象的大小
    print(resized.get_shape())
    plt.imshow(resized.eval())
    #plt.show()
    #將表示一張圖片的三維矩陣重新按照jpeg的格式編碼存入檔案中
    encode_image=tf.image.encode_jpeg(img_data)
    with tf.gfile.GFile('./path/to/picture/timg_output.jpg','wb') as f:
        f.write(encode_image.eval())
 
 
    #擷取部分影象,從中間擷取,如果擷取的面積大於原影象,則填充0
    croped=tf.image.resize_image_with_crop_or_pad(img_data,1000,1000)
    plt.imshow(croped.eval())
    plt.show()
 
 
    #按照比例裁剪影象
    central_croped=tf.image.central_crop(img_data,0.5)
    plt.imshow(central_croped.eval())
    plt.show()
 
    #影象翻轉
    #將影象上下翻轉
    flipped=tf.image.flip_up_down(img_data)
    #將影象左右翻轉
    flipped=tf.image.random_flip_left_right(img_data)
    #將影象沿對角線翻轉
    transposed=tf.image.transpose_image(img_data)
 
    #將影象隨機進行翻轉
    flipped=tf.image.random_flip_left_right(img_data)
    flipped=tf.image.random_flip_up_down(img_data)  #隨機進行上下翻轉
 
    #影象的色彩調整
    #調整影象的亮度、對比度、飽和度和色相
    #將影象的亮度-0.5
    adjusted=tf.image.adjust_brightness(img_data,-0.5)
    #在[-max_delta,max_delta]內隨機調整影象的亮度
    adjusted=tf.image.random_brightness(img_data,0.5)
 
    #影象的對比度-5
    adjusted=tf.image.adjust_contrast(img_data,-5)
    #在[lower,upper]範圍內隨機調整圖的對比度
    adjusted=tf.image.random_contrast(img_data,2,7)
 
    #調整影象的色相
    adjusted=tf.image.adjust_hue(img_data,0.3)
    #在[-maxdelta,maxdelta]範圍內隨機調整影象的色相 maxdelat 在0-0.5的範圍內
    adjusted=tf.image.random_hue(img_data,0.4)
 
    #調整影象的飽和度
    adjusted=tf.image.adjust_saturation(img_data,5)
    #在[lower,upper]範圍內隨機調整影象的飽和度
    adjusted=tf.image.random_saturation(img_data,1,10)
 
    #tensorflow還提供了影象的準淨化過程,將影象的數字均值變為0,方差變為1
    adjusted=tf.image.per_image_standardization(img_data)
 
    #許多的影象需要關注的物體可以使用標註框標註出來
    #tf.image.draw_bounding_boxes函式要求處理影象的矩陣是實數,輸入是一個batch資料,多張影象組成的四維矩陣,所以需要將解碼後的影象增加一個維度
    batched=tf.expand_dims(img_data,0)
    #下面都是相對的位置
    boxes=tf.constant([[[0.05,0.05,0.7,0.9],[0.2,0.3,0.9,0.8]]])
    result=tf.image.draw_bounding_boxes(batched,boxes)
    plt.imshow(result[0].eval())
    plt.show()