1.配置開發(fā)環(huán)境Anaconda
(1)打開Anaconda Prompt俺祠,將網(wǎng)址替換為清華鏡像,這樣下載各種依賴會快一些:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes
(2)打開Anaconda Navigator借帘,創(chuàng)建一個運行環(huán)境蜘渣,名稱為tensorflow36,并安裝tensorflow和opencv
2.Hello World
(1)在Navigator中Home頁面里運行notebook
(2)圖片的讀取與展示
cv2.imread()
用于圖片讀取肺然,它接受2個參數(shù)蔫缸。參數(shù)1為文件名,參數(shù)2為圖片讀取類型狰挡,0為讀取成灰度圖捂龄,1為讀取成彩色圖
cv2.imshow()
用于顯示圖片,它接受2個參數(shù)加叁。參數(shù)1為窗體名稱倦沧,參數(shù)2為讀取圖片的原始數(shù)據(jù)
cv2.waitKey(0)
用于程序暫停召嘶,要顯示圖片必須運行這行代碼
import cv2
img = cv2.imread('image0.jpg',1)
cv2.imshow('image',img)
cv2.waitKey(0)
(3)圖片的寫入
cv2.imwrite()
該方法接受3個參數(shù)洒扎。參數(shù)1為文件名徐伐,參數(shù)2為圖片原始數(shù)據(jù)乘寒,參數(shù)三為壓縮質(zhì)量灰粮,不同的圖片格式擁有不同的數(shù)值范圍,對于jpg來說可選質(zhì)量0-100樟凄,對于png來說壓縮范圍為0-9
import cv2
img = cv2.imread('image0.jpg',1)
#完成圖片的寫入功能
cv2.imwrite('image1.jpg',img,[cv2.IMWRITE_JPEG_QUALITY,50])
cv2.imwrite('image1.png',img,[cv2.IMWRITE_PNG_COMPRESSION,0])
#jpg 0 壓縮比高 png 0 壓縮比低
#jpg 壓縮范圍 0-100 png 壓縮范圍 0-9
(4)像素操作基本概念
- 顏色深度:按8bit舉例引矩,就是用8位存儲一個顏色的值,8bit的每個顏色通道的取值范圍是0-255
- 圖片大醒嗯肌:640x480即水平喝噪、豎直方向上有640、480個像素指么;640x480x3即圖片占用的空間(8bit圖片)
- 圖片格式:對于png圖片來說酝惧,它采用的都是無損壓縮方式,比jpg多出一個alpha顏色通道伯诬,用來存儲透明度
- 顏色通道:opencv讀取的圖片顏色通道是按bgr來排列的
(b,g,r) = img[0,0]
用元組來存儲一個像素的顏色
(b,g,r) = img[100,100] #img[]是一個矩陣結(jié)構(gòu)晚唇,讀取出的數(shù)據(jù)以元組儲存,左上角為起點
print(b,g,r) #openCV讀取顏色為bgr
for i in range(1,100):
for j in range(1,100):
img[100+i,100+j] = (255,0,0)
cv2.imshow('image2',img)
cv2.waitKey(0)
(5)tensorflow基礎知識
- 使用圖 (graph) 來表示計算任務
- 在被稱之為 會話 (Session) 的上下文 (context) 中執(zhí)行圖
- 使用張量(tensor) 表示數(shù)據(jù)
- 通過變量 (Variable) 維護狀態(tài)
- 使用 feed 和 fetch 可以為任意的操作賦值或者從其中獲取數(shù)據(jù)
- 在Tensorflow計算圖(graph)中盗似,操作間傳遞的數(shù)據(jù)都是 tensor哩陕。 可以把 TensorFlow中tensor 看作是一個 n 維的數(shù)組或列表。 一個 tensor 包含一個靜態(tài)類型 rank赫舒,和 一個 shape悍及。
- 圖中的節(jié)點被稱之為 op (operation)。 一個 op 獲得 0 個或多個 Tensor号阿,執(zhí)行計算, 產(chǎn)生 0 個或多個 Tensor并鸵。每個 Tensor 是一個類型化的多維數(shù)組。例如扔涧,你可以將一小組圖像集表示為一個四維浮點數(shù)數(shù)組 [batch, height, width, channels]园担。
- 一個圖描述了計算的過程。為了進行計算枯夜,圖必須在會話里被啟動弯汰。會話將圖的 op 分發(fā)到諸如 CPU 或 GPU 之類的 設備 上,同時提供執(zhí)行 op 的方法湖雹。這些方法執(zhí)行后咏闪, 將產(chǎn)生的 tensor 返回。
import tensorflow as tf
data1 = tf.constant(2,dtype=tf.int32) #定義常量
data2 = tf.Variable(10,name='var') #變量
print(data1)#直接打印的為張量
print(data2)
sess = tf.Session() #tensorflow中所有的操作要通過會話變量來進行
print(sess.run(data1))
init = tf.global_variables_initializer() #如果在圖中定義了變量一定要調(diào)用init為變量初始化
sess.run(init)
print(sess.run(data2))
sess.close()
#使用with方式可以不用關閉會話
'''
init = tf.global_variables_initializer()
sess = tf.Session()
with sess:
sess.run(init)
print(sess.run(data2))
'''
(6)Tensorflow四則運算
tf.add()
加法 tf.substract()
減法 tf.multiply()
乘法 tf.divide()
除法
import tensorflow as tf
data1 = tf.constant(6)
data2 = tf.Variable(2)
dataAdd = tf.add(data1,data2)
dataCopy = tf.assign(data2,dataAdd)#將結(jié)果拷貝到data2中
dataMul = tf.multiply(data1,data2)
dataSub = tf.subtract(data1,data2)
dataDiv = tf.divide(data1,data2)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print(sess.run(dataAdd))
print(sess.run(dataMul))
print(sess.run(dataSub))
print(sess.run(dataDiv))
print(sess.run(dataCopy))
print(dataCopy.eval())
print(tf.get_default_session().run(dataCopy))
print('end')
使用占位符方式
import tensorflow as tf
data1 = tf.placeholder(tf.float32)
data2 = tf.placeholder(tf.float32)
dataAdd = tf.add(data1,data2)
with tf.Session() as sess:
print(sess.run(dataAdd,feed_dict={data1:2,data2:6}))
print('end')
(7)tensorflow矩陣
通過[ [data1,data2,... ] ]創(chuàng)建摔吏,最外層的[ ]只代表一個數(shù)組鸽嫂,里面的[ ]代表一行,內(nèi)層的數(shù)據(jù)個數(shù)代表了幾列征讲,例如[[1,2],[3,4]]
代表一個2*2的矩陣
import tensorflow as tf
data1 = tf.constant([[6,6]])#創(chuàng)建一個1x2的矩陣
data2 = tf.constant([[2],[2]])#創(chuàng)建一個2x1的矩陣
data3 = tf.constant([[1,2],[3,4],[5,6]])#3x2矩陣
print(data3.shape)
with tf.Session() as sess:
print(sess.run(data3))
print(sess.run(data3[0]))#打印第一行
print(sess.run(data3[:,0]))#打印第一列
print(sess.run(data3[0,1]))#第一行第二列
到這就結(jié)束了什么都不會~~