Tensorflow影象處理相關操作
阿新 • • 發佈:2018-12-14
#對影象的處理 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()