opencv學習筆記

1.圖像讀寫壓縮
img=cv2.imread(r"1.png",1) # 讀取
cv2.imshow(“image”,img) # 顯示
cv2.imwrite(“out1.jpg”,img,) # 寫
cv2.imwrite(“yasuo.png”,img,[cv2.IMWRITE_PNG_COMPRESSION,9] ) #png 壓縮
jpg壓縮0-100(100質量最好) ,png 0-9(0質量最好)

2.圖像resize dst=cv2.resize(img,(w,h))
2.1最近鄰域插值法 iNew=int(i*(height1.0/des_height)) jNew=int(j(width*1.0/des_width))
2.2雙線性插值法

3.縮放矩陣
[[A1 ,A2,B1] , [A3,A4,B2]] == > 拆分爲[[A1,A2],[A3,A4]] 和 [[B1,B2]] 對於輸入xy來說
Newx = A1x+A2Y+B1
newY =A2x+A2y +B2
4.仿射函數
獲取仿射變換矩陣 cv2.getAffineTransform(mat_src,mat_det) #左上左下右上三個點映射,
獲取旋轉矩陣 cv2.getRotationMatrix2D((width/2,height/2),45,0.5)#中心,旋轉
角度,縮放比
然後進行仿射變換

5.轉灰度圖
cv2.imread(“1.jpg”,0)
dest=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
心理學公式r0.299+g0.587+b*0.114

6.顏色反轉 負片 255 -像素(灰度 bgr都可以)
7.馬賽克 相鄰10個像素用同一個像素替換 例子

foriinrange(100,500):
forjinrange(200,400):
ifi%100andj%100:
b,g,r=img[i,j]
forxinrange(0,10):
for y inrange(0,10):
dest[i+x,j+y]=(b,g,r)

8.毛玻璃效果 與馬賽克類似,只不過是一定範圍內隨機取像素替代
mm=8#範圍
For i in range(0,h-mm):
For j in range(0,w-mm):
index=int(random.random()*8)
b,g,r=img[i+index,j+index]
dest[i,j]=(b,g,r)
9.邊緣檢測
9.1 canny 灰度 去噪聲 最後檢測
img=cv2.imread(“1.jpg”,1)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.GaussianBlur(gray,(3,3),0) # 卷積核
dest=cv2.Canny(img,300,300) # 300是閾值
9.2sobel 2個矩陣,公式爲 像素分別卷積這兩個矩陣。分別得出x y方向的卷積值,然後,算梯度,比閾值
#x方向的矩陣
#[[1,2,1],
#[0,0,0],
#[-1,-2,-1]]
#y方向的矩陣
#[[1,0,-1],
#[2,0,-2],
#[1,0,-1]]

For I in range(0,h-2):
	For j in range(0,w-2):
		gy=gray[i,j]+gray[i,j+1]*2+gray[i,j+2]-gray[i+2,j]-2*gray[i+2,j+1]-gray[i+2,j+2]
		gx=gray[i,j]-gray[i,j+2]+2*gray[i+1,j]-2*gray[i+1,j+2]+gray[i+2,j]-gray[i+2,j+2]
		gard=math.sqrt(gx*gx+gy*gy) # 求梯度
		If gard > 300:    # 閾值300
			dest[i,j]=255
		else:
			dest[i,j]=0

10 浮雕效果 公式 (x)點像素-(x+1)點像素+150
11 油畫 效果
#1灰度化
#2圖片分爲若干個方塊,統計小方塊灰度值
#3把灰度值分等級如8個段,把步驟2的灰度值映射到等級裏
#4找到灰度等級最多的等級,並計算平均值
#5平均值替換原來的像素值

12 繪製
12.1直線繪製 cv2.line(dst,(100,200),(400,200),(0,255,0),10,cv2.LINE_AA)#圖,起始位置,結束位置,顏色,寬度,抗鋸齒參數
12.2矩形繪製cv2.rectangle(dst,(100,100),(400,400),(0,255,255),-1)#圖,起始,結束,顏色,內容填充-1爲填充,>0爲寬度
12.3 圓形 cv2.circle(dst,(200,200),50,(255,0,0),-1)#圖,圓心,半徑,顏色,填充

13視頻處理
cap=cv2.VideoCapture(“1.mp4”)
isOpen=cap.isOpened()
fps=cap.get(cv2.CAP_PROP_FPS)#fps
width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))#每一幀寬
height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))#每一幀寬
(flag,frame)=cap.read()#讀取一幀 ,flag成功與否,frame

#圖片生成視頻
videoWirte=cv2.VideoWriter("out.mp4",-1,24,(640,480)) #,保存的視頻,文件名,變啊默契,幀率,尺寸
videoWirte.write(img) #寫圖片
14. 特徵
	a. harr特徵 +adaboost分類
	b. Hog 特徵 +svm分類 尋求最優超平面
		svm=cv2.ml.SVM_create()#創建支持向量積
		svm.setType(cv2.ml.SVM_C_SVC)#svmtype類型
		svm.setKernel(cv2.ml.SVM_LINEAR)#線性分類器
		svm.setC(0.01)
		result=svm.train(data,cv2.ml.ROW_SAMPLE,label)
		#預測
		(pre1,pre2)=svm.predict(pt_data)
		
		i. 特徵 img   整個圖
		ii. windows窗體   圖中一部分,推薦大小爲 64*128 , 特徵計算最頂層單元,得到目標全部信息特徵,可以判決
		iii. Block    窗體種一部分  ,來滑動的計算的 ,windowsize的wh是其整數倍,推薦大小16*16,步長一般8*8 。 計算block的數量爲((64-16)/8+1) *((128-16)/8+1) =105
		iv. Cell      block中一部分 ,一般8*8     一個block有四個,
		v. Bin   一個bin 40度,一個cell含有九個bin
		vi. hog特徵維度 是一個向量,維度 =105*4*9 =3780   (wind bolck個數* block下cell個數*cell下bin個數)
		vii. 梯度:像素爲單位 (需要計算 windows窗體下所有元素)特徵模板 :水平[1 0 -1]豎直[[1] [0] [1]]    將像素與模板進行卷積運算 。  f爲 根號下(a方+b方) angle =arctan(a/b)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章