Opencv(下)
圖像閾值化處理
[0,255]
<=127的轉化爲0 >=127轉化爲1
ret,dst = cv2.threshold(src,thresh,maxval,type)
src:源圖像(需要閾值化處理的圖像)
maxval:當像素超過了閾值,(小於閾值)所賦予的值,否則取0
ret:閾值返回值(閾值設定的是多少)
dst:輸出的圖像
type: (1) cv2.THRESH_BINARY:當像素點大於閾值時,取指定的255,小於等於閾值時,取0
(2)cv2.THRESH_BINARY_INV:當像素點大於閾值時,取指定的0,小於等於閾值時,取255
注意事項:當閾值處理彩色圖像時,出現粉色等顏色的原因在於BGR三通道的疊加
(3)cv2.THRESH_TRUNC:超過閾值則取閾值,低於閾值,則取自身
(4)cv2.THRESH_TOZERO:超過閾值不變,低於閾值取0
(5)cv2.THRESH_TOZERO_INV:超過閾值變爲0,低於閾值不變
import cv2
path = r'./pic.jpg'
img = cv2.imread(path,1)
ret,img1 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
cv2.imshow('img',img1)
cv2.waitKey(0)
均值濾波
cv2.blur(src,k)
src:源圖像
kernel:大小(選擇多大的矩陣進行移動) 【3*3】最常見
import cv2
path = r'./pic.jpg'
img = cv2.imread(path,1)
new_img = cv2.blur(img,(3,3))
cv2.imshow('img',new_img)
cv2.waitKey(0)
方框濾波
cv2.boxFilter(src,depth)
src:源圖像
depth:圖像的深度,填-1,表示與源圖像深度相同。
ksize:核大小(3*3)or(5 * 5)
normalize:是否進行歸一化
0:false (求和,像素點溢出,取255)
1: True (求均值,與均值濾波相同)
import cv2
path = r'./pic.jpg'
img = cv2.imread(path,1)
new_img = cv2.boxFilter(img,-1,(2,2))
cv2.imshow('img',new_img)
cv2.waitKey(0)
高斯濾波
考慮了權重的問題
cv2.GaussianBlur(src,ksize)
src:源圖像
ksize:(3*3) (5 *5) 在高斯濾波中必須爲奇數
sigmaX,sigmaY:高斯核函數在X或Y方向上的標準偏差【控制權重】
sigmaX = 0, sigmaX = 0.3*((ksize-1) *0.5-1)+0.8
import cv2
path = r'./pic.jpg'
img = cv2.imread(path,1)
new_img = cv2.GaussianBlur(img,(5,5),0)
cv2.imshow('img',new_img)
cv2.waitKey(0)
中值濾波
cv2.medianBlur(src,ksize)
src:源圖像
ksize:核大小 只能傳遞Int
import cv2
path = r'./pic.jpg'
img = cv2.imread(path,1)
new_img = cv2.medianBlur(img,3)
cv2.imshow('img',new_img)
cv2.waitKey(0)
圖像的腐蝕
1、形態學轉化主要針對於二值圖像(黑白圖像(非0即1))
2、卷積核
cv2.erode(src,kernel,iterations)
src:源圖像
kernel:卷積核 (3*3)
iterations:迭代次數
import cv2
import numpy as np
path = r'./2.png'
img = cv2.imread(path,1)
kernal = np.ones((3,3),np.uint8)
new_img = cv2.erode(img,kernal,iterations=5)
cv2.imshow('img',new_img)
cv2.waitKey(0)
圖像的膨脹
圖像腐蝕的逆操作
cv2.dilate(src,kernel,iterations)
src:源圖像
kernel:卷積核 (3*3)
iterations:迭代次數
import cv2
import numpy as np
path = r'./3.png'
img = cv2.imread(path,1)
kernal = np.ones((3,3),np.uint8)
new_img = cv2.dilate(img,kernal,iterations=5)
cv2.imshow('img',new_img)
cv2.waitKey(0)
圖像的開運算
腐蝕:去除圖片的噪聲
膨脹:恢復原來的圖片(沒有噪聲的)
開運算:腐蝕–》膨脹
cv2.morphologyEx(src,cv2.MORPH_OPEN,ksize)
src:源圖像
cv2.MORPH_OPEN:開運算(先腐蝕後膨脹)
ksize:卷積核的大小(表示腐蝕及膨脹的大小)
import cv2
import numpy as np
path = r'./2.png'
img = cv2.imread(path,1)
kernal = np.ones((7,7),np.uint8)
new_img = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernal)
cv2.imshow('img',new_img)
cv2.waitKey(0)
圖像的閉運算
閉運算:就是先膨脹->再腐蝕
實質:還是爲了去除噪聲
cv2.morphologyEx(src,cv2.MORPH_CLOSE,ksize)
src:源圖像
cv2.MORPH_OPEN:開運算(先腐蝕後膨脹)
ksize:卷積核的大小(表示腐蝕及膨脹的大小)
import cv2
import numpy as np
path = r'./close.png'
img = cv2.imread(path,1)
kernal = np.ones((7,7),np.uint8)
new_img = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernal)
cv2.imshow('img',new_img)
cv2.waitKey(0)
圖像的梯度
目的:主要爲了提取目標圖像的輪廓
cv2.morphologyEx(src,cv2.MORPH_GRADIENT,k)
src:源圖像
cv2.MORPH_GRADIENT:進行梯度運算(膨脹-腐蝕)
k:卷積核
import cv2
import numpy as np
path = r'./1.png'
img = cv2.imread(path,1)
# #膨脹操作
kernal = np.ones((3,3),np.uint8)
# img1 = cv2.dilate(img,kernal,iterations=5)
# #腐蝕操作
# img2 = cv2.erode(img,kernal,iterations=5)
# new_img = img1 - img2
new_img = cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernal)
cv2.imshow('img',new_img)
cv2.waitKey(0)
圖像的禮帽操作
目的:爲了提取圖像中的噪聲
本質:原始圖像 - 開運算之後的圖像
cv2.morphologyEx(src,cv2.MORPH_TOPHAT,k)
src:源圖像
cv2.MORPH_TOPHAT:進行禮帽操作
k:卷積核
import cv2
import numpy as np
path = r'./close.png'
img = cv2.imread(path,1)
kernal = np.ones((5,5),np.uint8)
new_img = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernal)
cv2.imshow('img',new_img)
cv2.waitKey(0)
圖像的黑帽操作
目的:爲了提取圖像中的噪聲
本質:閉運算 - 原始圖像
cv2.morphologyEx(src,cv2.MORPH_BLACKHAT,k)
src:源圖像
cv2.MORPH_BLACKHAT:進行黑帽操作
k:卷積核
import cv2
import numpy as np
path = r'./close.png'
img = cv2.imread(path,1)
kernal = np.ones((5,5),np.uint8)
new_img = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernal)
cv2.imshow('img',new_img)
cv2.waitKey(0)