Tensorflow深度學習之十一:基礎影象處理
OpenCV是一個十分強大的視覺庫,tensorflow也提供了十分強大的圖片處理函式,下面是一個簡單的例子來說明使用tensorflow和opencv兩個工具進行深度學習程式的設計。
首先是使用的原始圖片:
import tensorflow as tf
import cv2
# 這裡定義一個tensorflow讀取的圖片格式轉換為opencv讀取的圖片格式的函式
# 請注意:
# 在tensorflow中,一個畫素點的顏色順序是R,G,B。
# 在opencv中,一個畫素點的顏色順序是B,G,R。
# 因此,我們迴圈遍歷每一個畫素點,將第0位的顏色和第2位的顏色數值換一下即可。
# 第一個引數name:將要顯示的視窗名稱。
# 第二個引數image:儲存圖片資訊的一個tensor。
def cv2Show(name="", image=None):
# 獲取矩陣資訊
np = image.eval()
# 獲取行數列數
row, col = len(np),len(np[1])
# 兩重迴圈遍歷
for i in range(row):
for j in range(col):
# 交換數值
tmp = np[i][j][0]
np[i][j][0 ] = np[i][j][2]
np[i][j][2] = tmp
# 顯示圖片
cv2.imshow(name,np)
pass
# tensorflow會話
with tf.Session() as sess:
# 以二進位制的方式讀取圖片。
image_raw_data = tf.gfile.FastGFile("bus.jpg", "rb").read()
# 按照jpeg的格式解碼圖片。
image_data = tf.image.decode_jpeg(image_raw_data)
# 顯示原圖片。
cv2Show("Read by Tensorflow+Dispalyed by Opencv",image_data)
# opencv讀取同一張圖片。
img = cv2.imread("bus.jpg")
# opencv顯示圖片。
cv2.imshow("Read by Opencv+Displayed by Opencv",img)
# 重新調整大小。
# resize_images(images,size,method=ResizeMethod.BILINEAR,align_corners=False)'
# 引數如下:
# images:需要調整的圖片,通常是一個tensor
# size:調整之後的大小,一般是一個長度為2的list
# method:調整大小使用的方法,這裡我們使用最近鄰居法。
# align_corner:是否對齊四角。
resized = tf.image.resize_images(image_data,[300,300],method=tf.image.ResizeMethod.NEAREST_NEIGHBOR)
# 顯示圖片。
cv2Show("Resized:Nearest Neighbor",resized)
# 調整大小,採用切割或者填充的方式。
# 如果原始影象的尺寸大於目標影象,那麼這個函式會自動切割原始影象中的居中的部分。
# 如果原始影象的尺寸小於目標影象,那麼這個函式會自動在原始影象的周圍採用全0填充。
# resize_image_with_crop_or_pad(image, target_height, target_width)
# image:待調整的影象。
# target_height:目標影象的高度。
# target_width:目標影象的寬度。
cropped = tf.image.resize_image_with_crop_or_pad(image_data,300,300)
cv2Show("After being cropped",cropped)
padded = tf.image.resize_image_with_crop_or_pad(image_data,600,900)
cv2Show("After being padded",padded)
# 通過比例調整影象大小。
# central_crop(image, central_fraction)
# image:待調整的影象。
# central_fraction:比例,是一個(0,1]之間的數字,表示需要調整的比例。這裡我們選擇的比例是0.5,即50%。
central_cropped = tf.image.central_crop(image_data,0.5)
cv2Show("After being central-cropped",central_cropped)
cv2.waitKey()
使用的函式功能,引數等資訊在程式碼中均已寫明。
下面的表格實在使用調整大小的函式時常常需要使用的Method取值。
Method | 影象大小的調整演算法 | 值 |
---|---|---|
0 | 雙線性插值法 | tf.image.ResizeMethod.BILINEAR |
1 | 最近鄰居法 | tf.image.ResizeMethod.NEAREST_NEIGHBOR |
2 | 雙三次插值法 | tf.image.ResizeMethod.BICUBIC |
3 | 面積插值法 | tf.image.ResizeMethod.AREA |
下面是程式的執行截圖:
相關推薦
Tensorflow深度學習之十一:基礎影象處理
OpenCV是一個十分強大的視覺庫,tensorflow也提供了十分強大的圖片處理函式,下面是一個簡單的例子來說明使用tensorflow和opencv兩個工具進行深度學習程式的設計。 首先是使用的原始圖片: import tensorflow as
Tensorflow深度學習之十二:基礎影象處理之二
首先放出原始影象: 1、影象的翻轉 import tensorflow as tf import cv2 # 這裡定義一個tensorflow讀取的圖片格式轉換為opencv讀取的圖片格式的函式 # 請注意: # 在tensorflow中,一個畫素
Tensorflow深度學習之十二:基礎圖像處理之二
fcm 數字 ssi port con tty .net term file Tensorflow深度學習之十二:基礎圖像處理之二 from:https://blog.csdn.net/davincil/article/details/76598474 首先放出
Tensorflow深度學習之十九:矩陣切片與連結
1、TensorFlow矩陣切片操作:tf.slice函式 函式原型:slice(input_, begin, size, name=None) 引數: input:待切片的矩陣tensor。 begin:起始位置,表示從哪一個資料開始進行切片。這個起始
Tensorflow深度學習之十四:Tensorflow變數管理
宣告:本篇文章參考《Tensorflow實戰Google深度學習框架》一書 Tensorflow提供了通過變數名稱來建立或者獲取一個變數的機制。通過這個機制,在不同的函式中可以直接通過變數的名字來使用變數,而不需要將變數通過引數的形式到處傳遞。 Tensor
Tensorflow深度學習之三十三:tf.scatter_update
一、tf.scatter_update tf.scatter_update( ref, indices, updates, use_locking=True, name=None ) Applies sparse
Java Web 學習筆記之十一:RestEasy統一處理異常
JBoss RestEasy框架配置異常統一處理 前提 利用JBoss restEasy框架搭建的restful java web後臺應用 希望通過統一的方式對restful介面丟擲的異常進行
Esper學習之十一:EPL語法(七)
轉載請註明出處:http://blog.csdn.net/luonanqin 元宵過後回公司上班,換了個部門,換了個領導,做的事也換了,不過Esper還是會繼續搞,所以部落格也會慢慢寫的,大家別急。^_^ 上一篇說到了EPL如何訪問關係型資料
Nginx學習之十一-Nginx啟動框架處理流程
table ssl 優先級 init int 數組 linux cmd 默認 Nginx啟動過程流程圖 下面首先給出Nginx啟動過程的流程圖: ngx_cycle_t結構體 Nginx的啟動初始化在src/core/nginx.c的main函數中完成,當然main
【OpenCV入門教程之十一】 形態學影象處理(二):開運算、閉運算、形態學梯度、頂帽、黑帽合輯
上篇文章中,我們重點了解了腐蝕和膨脹這兩種最基本的形態學操作,而運用這兩個基本操作,我們可以實現更高階的形態學變換。所以,本文的主角是OpenCV中的morphologyEx函式,它利用基本的膨脹和腐蝕技術,來執行更加高階的形態學變換,如開閉運算、形態學梯度、“頂帽”、“黑帽
Tensorflow深度學習之二十一:LeNet的實現(CIFAR-10資料集)
一、LeNet的簡介 LeNet是一個用來識別手寫數字的最經典的卷積神經網路,是Yann LeCun在1998年設計並提出的。Lenet的網路結構規模較小,但包含了卷積層、池化層、全連線層,他們都構成了現代CNN的基本元件。 LeNet包含輸入層在內共有
Tensorflow深度學習之二十二:AlexNet的實現(CIFAR-10資料集)
二、工程結構 由於我自己訓練的機器記憶體視訊記憶體不足,不能一次性讀取10000張圖片,因此,在這之前我按照圖片的類別,將每一張圖片都提取了出來,儲存成了jpg格式。與此同時,在儲存圖片的過程中,儲存了一個python的dict結構,鍵為每一張圖片的相對地
Tensorflow深度學習之二十七:tf.nn.conv1d
一、conv1d 在NLP領域,甚至影象處理的時候,我們可能會用到一維卷積(conv1d)。所謂的一維卷積可以看作是二維卷積(conv2d)的簡化,二維卷積是將一個特徵圖在width和height兩個方向上進行滑窗操作,對應位置進行相乘並求和;而一維卷積則
Tensorflow深度學習之三十二: tf.scatter_nd_update
一、tf.scatter_nd_update 函式定義: tf.scatter_nd_update( ref, indices, updates, use_locking=True, name=None )
機器學習與深度學習系列連載: 第二部分 深度學習(十一)卷積神經網路 2 Why CNN for Image?
卷積神經網路 2 Why CNN 為什麼處理圖片要用CNN? 原因是: 一個神經元無法看到整張圖片 能夠聯絡到小的區域,並且引數更少 圖片壓縮畫素不改變圖片內容 1. CNN 的特點 卷積: 一些卷積核遠遠小於圖片大小; 同樣的pat
kubernetes學習筆記之十一:kubernetes dashboard認證及分級授權
第一章、部署dashboard 作為Kubernetes的Web使用者介面,使用者可以通過Dashboard在Kubernetes叢集中部署容器化的應用,對應用進行問題處理和管理,並對叢集本身進行管理。通過Dashboard,使用者可以檢視叢集中應用的執行情況,同時也能夠基於Dashboard建立或修
TensorFlow深度學習實戰(一):AlexNet對MNIST資料集進行分類
概要 進來一段時間在看深度學習中經典的CNN模型相關論文。同時,為了督促自己學習TensorFlow,通讀論文之後開始,利用TensorFlow實現各個模型,復現相關實驗。這是第一篇論文講解的是AlexNet,論文下載網址為:ImageNet Classific
學習MongoDB 十一: MongoDB聚合(Aggregation Pipeline基礎篇上)(三)
一、Aggregate簡介 db.collection.aggregate()是基於資料處理的聚合管道,每個文件通過一個由多個階段(stage)組成的管道,可以對每個階段的管道進行分組、過濾等功能,然後經過一系列的處理,輸出相應的結果。
Tensorflow深度學習之七:再談mnist手寫數字識別程式
之前學習的第一個深度學習的程式就是mnist手寫字型的識別,那個時候對於很多概念不是很理解,現在回過頭再看當時的程式碼,理解了很多,現將加了註釋的程式碼貼上,與大家分享。(本人還是在學習Tensorflow的初始階段,如果有什麼地方理解有誤,還請大家不吝指出。)
深度學習開源框架系列:基礎演算法之傅立葉變換:1:概要介紹
傅立葉變換時數字訊號處理的重要方法之一,是法國數學家傅立葉在1807年在法國科學學會上發表的一篇文章中所提出的,在文章中使用了正弦函式描述溫度分佈,而且提出了一個著名的論斷:任何連續性的週期訊號都可以由一組適當的正弦曲線組合而成。而這個論斷被當時審查論文的著名數