【Tensorflow_DL_Note14】TensorFlow視覺化學習1-Tensorflow與OpenCv混合程式設計

馬衛飛發表於2018-05-10
#====================================================================================================
#檔案說明:
#       [1]OpenCv讀入圖片後,使用Tensorflow中的tf.plcaeholder佔位符變數,將圖片載入找Tensorflow#       [2]然後,使用Tensorflow裡面的函式,對影象進行裁剪
#       [3]最後,使用OpenCv裡面的函式,對影象進行顯示
#函式原型:
#       def slice(input_, begin, size, name=None):
#函式說明:
#       [1]Extracts a slice from a tensor
#       [2]從一個張量中,提取一個切片
#引數說明:
#       [1]input_  :  輸入的張量,可以將RGB影象矩陣看成一個三維的張量,維度為[height,width,depth]
#       [2]begin   : 張量切片的起始座標點
#       [3]size    :  切片的尺寸
#====================================================================================================
import cv2
import tensorflow as tf

image_raw_data_cv = cv2.imread("F:/cifar-10-batches-py/building.jpg")  #[1]OpenCv載入影象
image_raw_data_tf = tf.placeholder('uint8',[None,None,3])              #[2]定義一個接收影象的plceholder變數
image_slice       = tf.slice(image_raw_data_tf,[10,100,0],[100,200,-1])#[3]裁剪影象,[heigt,widht,depth]

with tf.Session() as sess:              #[1]建立會話物件
                                        #[2]首先,將OpenCv讀入的影象載入到Tensorflow的變數中,然後,執行操作
    resultImg = sess.run(image_slice,feed_dict={image_raw_data_tf:image_raw_data_cv})
    print(resultImg.shape)              #[3]輸出,處理後,影象的維度

cv2.imshow('resultImg',resultImg)       #[4]視覺化
cv2.imshow('srcImg',image_raw_data_cv)
cv2.waitKey(0)


#====================================================================================================
#檔案說明:
#       [1]OpenCv讀入圖片後,在Tensorflow變數初始化的時候,將影象資料載入到tf.Variable#       [2]然後,使用Tensorflow裡面的函式tf.transpose對影象進行轉置
#       [3]最後,使用OpenCv裡面的函式,對影象進行顯示
#函式原型:
#       def transpose(a, perm=None, name="transpose", conjugate=False)
#函式說明:
#       這個函式主要用於交換張量不同的維度,如矩陣轉置
#引數說明:
#       [1]a   :  輸入的張量
#       [2]perm:  指定交換的維度,例如perm=[1,0,2]表示交換影象的高度和寬度,0代表高度,1代表寬度,2代表深度
#====================================================================================================
import cv2
import tensorflow as tf

image_raw_data_cv = cv2.imread("F:/cifar-10-batches-py/building.jpg")      #[1]OpenCv載入影象
image_raw_data_tf = tf.Variable(image_raw_data_cv,name='image_raw_data_tf')#[2]建立一個Tensorflow的變數類物件
initial           = tf.initialize_all_variables()                          #[3]在變數初始化的過程中,就將OpenCv
                                                                           # 載入的影象資料載入到了Tensorflow的變數中

with tf.Session() as sess:              #[1]建立會話物件
    transImgOp    = tf.transpose(image_raw_data_tf,perm=[1,0,2])           #[2]交換影象的高度和寬度
    sess.run(initial)
    resultImg     = sess.run(transImgOp)

cv2.imshow('resultImg',resultImg)       #[4]視覺化
cv2.imshow('srcImg',image_raw_data_cv)
cv2.waitKey(0)

#====================================================================================================
#檔案說明:
#        利用Tensorflow中的函式對影象進行縮放,Tensorflow中其他的影象預處理操作與次類似,例如影象翻轉操作
#====================================================================================================
import cv2
import tensorflow as tf

image_raw_data_cv = cv2.imread("F:/cifar-10-batches-py/building.jpg")      #[1]OpenCv載入影象
image_raw_data_tf = tf.Variable(image_raw_data_cv,name='image_raw_data_tf')#[2]建立一個Tensorflow的變數類物件
initial           = tf.global_variables_initializer()                      #[3]在變數初始化的過程中,就將OpenCv
                                                                           # 載入的影象資料載入到了Tensorflow的變數中

with tf.Session() as sess:              #[1]建立會話物件
    resizedImgOp  = tf.image.resize_images(image_raw_data_tf,[200,200],method=tf.image.ResizeMethod.NEAREST_NEIGHBOR)
    sess.run(initial)
    resultImg     = sess.run(resizedImgOp)

cv2.imshow('resultImg',resultImg)       #[4]視覺化
cv2.imshow('srcImg',image_raw_data_cv)
cv2.waitKey(0)

相關文章