01-基础部分
一、tensorflow和opencv測試
import tensorflow as tf import cv2hello = tf.constant('hello tensorflow') session = tf.Session() print(session.run(hello))print('hello opencv')運行效果如下:
二、基礎部分
1、opencv基礎
代碼三部曲:
1、引入OpenCV
2、調用相關API
3、通過stop讓圖片暫停方便觀察
imread處理過程:1,文件的讀取、2,封裝格式解析、3,數據解碼、4,數據加載
圖片封裝格式主要包括:jpg和png;
其主要包括:文件頭和文件數據(圖片壓縮編碼之后的數據)
cv2.imread('E:\Jupyter_workspace\study\img/water.png',1)
參數1:圖片路徑
參數2:圖片類型 1彩色 0灰色
opencv模塊組織結構,其中每個文件夾代表一個模塊
calib3d:主要用于相機的校準和3d內容相關的模塊
core:記錄了當前opencv的基礎數據類型,矩陣操作、繪圖相關(重要) dnn:神經網絡相關的模塊
feature2d:與角點檢測,圖像匹配相關 flann:與矩陣相關的模塊,領域搜索算法等等 highgui:圖形相關交互
imgcodecs和imgproc:圖像處理相關的模塊,濾波器,直方圖統計,均衡化、幾何變換、顏色處理(重要) ml:機器學習模塊(重要)
objdetect:物體檢測模塊 photo:圖片處理模塊,圖片的修復、去噪(重要) shape:
stitching:拼接模塊,大圖像的拼接,例如360全景相機
video、videoil和videostab:視頻信息模塊,視頻分解圖像,圖像合成視頻
2、圖片的寫入
cv2.imwrite('E:\Jupyter_workspace\study\img/water666.jpg',img)
參數1:所寫入圖片的名稱,必須有后綴
參數2:當前圖片的數據,這里是解碼之后的元素數據
3、圖片不同質量保存
對jpg圖像操作
cv2.imwrite('E:\Jupyter_workspace\study\img/water666.jpg',img,[cv2.IMWRITE_JPEG_QUALITY,0])
參數1:所寫入圖片的名稱,必須有后綴
參數2:當前圖片的數據,這里是解碼之后的元素數據
參數3:對寫入照片的質量進行選取,范圍為0-100,0表示壓縮包最高,即體積最小,效果最差,以犧牲數據模糊為代價減小體積(有損壓縮)
對png圖像操作
cv2.imwrite('E:\Jupyter_workspace\study\img/water_90.jpg',img,[cv2.IMWRITE_PNG_COMPRESSION,0])
參數1:所寫入圖片的名稱,必須有后綴
參數2:當前圖片的數據,這里是解碼之后的元素數據
參數3:對寫入照片的質量進行選取,范圍為0-9,0表示壓縮包最低,即體積最大,效果最好
png和jpg的區別:
1、jpg是有損壓縮,png是無損壓縮
2、png有透明度屬性,在修改RGB值的時候也可以修改圖片的透明度
4、像素操作
1,像素:圖片放大后的一個一個的小方塊
2,RGB:每個彩色圖像都是有RGB三種顏色所構成的
3,顏色深度:8bit的顏色深度可以表示的顏色范圍為0-255,可以表示256(28)種顏色;對應彩色圖像,RGB各有256種,其總共可以表示2563種顏色
4,圖片的寬高:(w,h)=(640,480)表示在x軸方向(寬w)有640個像素點,在y軸方向(高h)有480個像素點
例如:720* 547的圖像未壓縮的大小====720 * 547 * 3 * 8(bit)===720 * 547 * 3(Byte)===1.14 MB 3個顏色通道,顏色深度為8位
5,對應png圖像,包含RGN和alpha(α透明度)
6,在opencv中為BGR顏色通道
5、像素讀取與寫入操作
import cv2 img = cv2.imread('E:\Jupyter_workspace\study\img/water.png',1)(b,g,r) = img[100,100]#img[h,w] print(b,g,r)for i in range(1,100):img[10+i,100] = (255,0,0)#[h在變化,w不變]即豎直的藍線 cv2.imshow('image',img) cv2.waitKey(0) #cv2.waitKey(100)#100ms在圖像的寬為100處,從(10,100)到(110,100),加一條長度為100的藍線,這里位置為(h,w):
二、tensorflow基礎
1,tensorflow常量變量
import tensorflow as tfdata1 = tf.constant(2.5) data1_1 = tf.constant(2,dtype=tf.int32) data2 = tf.Variable(10,name = 'var') print(data1) print(data1_1) print(data2)sess = tf.Session() print(sess.run(data1)) print(sess.run(data1_1)) init = tf.global_variables_initializer() sess.run(init) print(sess.run(data2)) sess.close()結果如下:
結果解釋:
Tensor(“Const:0”, shape=(), dtype=float32) Tensor表示為張量,相當于一個數據
Const表示常數 shape表示維度 float32表示當前的數據類型
<tf.Variable ‘var:0’ shape=() dtype=int32_ref> Variable表示變量
int32_ref表示為32位int類型
tensorflow中所有的操作必須使用Session規劃進行
2,tensorflow運算原理
tensorflow的實質:張量tensor+計算圖graphs,即數據+計算圖
張量:就是數據可以是常量也可以是變量,可以是一維也可以是二維
op:operation可以是四則操作也可以是其他常規運算操作
graphs:數據和操作的過程
在tensorflow中,所有的操作都必須在session規劃中執行
session可以理解為一個運算交換的環境,故有了session.run()
tensorflow中所有的變量必須初始化之后才能完成,故需要一個init操作,而init的實則也是個計算圖,故需要使用session.run(init),只要運行這個計算圖之后,所有的session才能起作用,用完session之后需要close一下,session.close();當然也可以直接使用with操作。
運行結果:
3,常量與變量的四則運算
常量的四則運算
import tensorflow as tf data1 = tf.constant(6) data2 = tf.constant(2)dataAdd = tf.add(data1,data2) dataMul = tf.multiply(data1,data2) dataSub = tf.subtract(data1,data2) dataDiv = tf.divide(data1,data2)with tf.Session() as sess:print(sess.run(dataAdd))print(sess.run(dataMul))print(sess.run(dataSub))print(sess.run(dataDiv))變量的四則運算
import tensorflow as tf data1 = tf.constant(6) data2 = tf.Variable(2)init = tf.global_variables_initializer()#變量必須執行初始化操dataAdd = tf.add(data1,data2) dataMul = tf.multiply(data1,data2) dataSub = tf.subtract(data1,data2) dataDiv = tf.divide(data1,data2)with tf.Session() as sess:sess.run(init)print(sess.run(dataAdd))print(sess.run(dataMul))print(sess.run(dataSub))print(sess.run(dataDiv)) import tensorflow as tf data1 = tf.constant(6) data2 = tf.Variable(2)init = tf.global_variables_initializer()dataAdd = tf.add(data1,data2) dataCope = tf.assign(data2,dataAdd)#講dataAdd的內容賦值給data2with tf.Session() as sess:sess.run(init)print(sess.run(dataAdd))print(sess.run(dataCope))#data1+data2=6+2-->dataAdd-->data2此時為8print(dataCope.eval())#data2+data1=8+6-->data2此時為14print(tf.get_default_session().run(dataCope))#data2+data1=14+6-->data2此時為204,矩陣基礎
sess.run(dataAdd,feed_dict={data1:6,data2:2})
參數1:運算的張量
參數2:追加的數據,是一個data數據,{feed_dict={參數1:6,參數2:2}}
矩陣最外面為一個中括號[]
矩陣類比為數組,一個M行N列的數組;[里面為列],[] 整體為行
例如:一行兩列的矩陣 [[6,6]]
5,矩陣運算
矩陣相加:對應位置相加
矩陣相乘:前行乘后列
運行結果如下:
特殊矩陣的初始化
import tensorflow as tf mat0 = tf.constant([[1,2,3],#constant定義的為固定的矩陣,兩行三列且值確定,且最外層必須含有一個中括號[][3,4,5]])mat1 = tf.zeros([2,3])#兩行三列全零矩陣 mat2 = tf.ones([3,4])#三行四列全一矩陣 mat3 = tf.fill([4,5],15)#四行五列全15矩陣mat4 = tf.constant([[3],#三行一列矩陣[4],[5]]) mat5 = tf.zeros_like(mat4)#定義一個與mat4維度相同的全是0的矩陣mat6 = tf.linspace(0.0,2.0,11)#將[0.0-2.0]分成相等的10份,也就是11個數劃分10份,每個間隔為0.2mat7 = tf.random_uniform([2,3],1,10)#隨機創建一個兩行三列數組,值用[1,10)進行填充]with tf.Session() as sess:print(sess.run(mat7))運行結果如下:
三、numpy模塊的使用
import numpy as npdata1 = np.array([1,2,3,4,5]) data2 = np.array([[1,2],[3,4]])print(data1)#結果為:[1 2 3 4 5] print(data2) #結果為: ''' [[1 2][3 4]] ''' print(data1.shape,data2.shape)#結果為:(5,) (2, 2) print(np.zeros([2,3])) ''' 結果為: [[0. 0. 0.][0. 0. 0.]] ''' print(np.ones([2,2])) ''' 結果為: [[1. 1.][1. 1.]] '''data2[1,0] = 5 print(data2) ''' 結果為: [[1 2][5 4]] ''' print(data2[1,1])#結果為:4data3 = np.ones([2,3]) print(data3) ''' 結果為: [[1. 1. 1.][1. 1. 1.]] '''#這里并沒有改變data3的值,每次使用的還是兩行三列全1的值進行操作 print(data3 * 2)#矩陣乘以2 表示矩陣內所有的元素都乘以2 print(data3 + 2) print(data3 - 2) print(data3 / 2) ''' 結果為: [[2. 2. 2.][2. 2. 2.]] [[3. 3. 3.][3. 3. 3.]] [[-1. -1. -1.][-1. -1. -1.]] [[0.5 0.5 0.5][0.5 0.5 0.5]] '''data4 = np.array([[1,2,3],[4,5,6]]) print(data4) ''' 結果為: [[1 2 3][4 5 6]] '''print(data3+data4)#對應位置元素相加 ''' 結果為: [[2. 3. 4.][5. 6. 7.]] '''print(data3*data4)#對應位置元素相乘 ''' 結果為: [[1. 2. 3.][4. 5. 6.]] '''四、matplotlib模塊的使用
繪制折線圖
plt.plot(x,y,'b',lw=1)
參數1:x軸坐標
參數2:y軸坐標
參數3:繪圖的線條顏色
參數4:繪圖的線條寬度
運行結果如下:
繪制柱狀圖
plt.bar(x,y,0.5,alpha=1,color=‘b’)
參數1:x坐標
參數2:y坐標
參數3:0-1,表示每個柱狀間隔,1為緊緊相鄰
參數4:透明度
參數5:繪制線條顏色
運行結果如下:
五、神經網絡逼近股票收盤均價Demo
給出開盤價和結束價,之間的差用柱狀圖表示,若賺錢用綠色顯示,賠錢用紅色顯示
import tensorflow as tf import numpy as np import matplotlib.pyplot as pltdate = np.linspace(1,15,15) endPrice = np.array([2511.90,2538.26,2510.68,2591.66,2732.98,2701.69,2701.29,2678.67,2726.50,2681.50,2739.17,2715.07,2823.58,2864.90,2919.08]) beginPrice = np.array([2438.71,2500.88,2534.95,2512.52,2594.04,2743.26,2697.47,2695.24,2678.23,2722.13,2674.93,2744.13,2717.46,2832.73,2877.40]) plt.figure()for i in range(0,15):dateOne = np.zeros([2])dateOne[0] = idateOne[1] = ipriceOne = np.zeros([2])priceOne[0] = beginPrice[i]priceOne[1] = endPrice[i]if endPrice[i] > beginPrice[i]:plt.plot(dateOne,priceOne,'r',lw=8)else:plt.plot(dateOne,priceOne,'g',lw=8)plt.show()運行結果如下:
運行結果如下:
總結
- 上一篇: C++---汉明距离
- 下一篇: 02-图像的几何变换