【图像处理opencv】_图像锐化
目錄
0 程序環(huán)境與所學(xué)函數(shù)
1 卷積
2 均值模糊
3 中值濾波
4 高斯模糊
5 雙邊濾波
0 程序環(huán)境與所學(xué)函數(shù)
本章程序運(yùn)行需要導(dǎo)入下面三個(gè)庫(kù),并定義了一個(gè)顯示圖像的函數(shù)
import cv2 as cv import numpy as np import matplotlib.pyplot as pltdef show(img):if img.ndim == 2:plt.imshow(img, cmap='gray')else:plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))plt.show()所學(xué)函數(shù)
#卷積
cv.filter2D(img, -1, kernel)
#均值模糊
cv.blur(img, (5,5))
cv.boxFilter(img, -1, (5,5))
#中值濾波
cv.medianBlur(img,3)
#高斯模板
cv.GaussianBlur(img, (5,5), sigma)
#雙邊濾波
cv.bilateralFilter(img, -1, sigmaColor=50, sigmaSpace=3)
1 卷積
原理:?
opencv里面提供了一個(gè)卷積函數(shù) cv.filter2D(img,-1,kernel)
img-圖像,-1--數(shù)據(jù)類(lèi)型,用-1代替表示與原圖像輸出一致,kernel--卷積核
程序?qū)崿F(xiàn):
img = np.ones((5,5)) kernel = np.ones((3,3)) #卷積核的選擇盡量選擇3×3,5×5等有中心的矩陣,不然可能報(bào)錯(cuò)print(img) print(kernel)結(jié)果
#數(shù)學(xué)上的卷積應(yīng)該先要將卷積核鏡像一下再操作,這里是直接相乘相加只表示相關(guān)性 #卷積后得到的結(jié)果應(yīng)該變小,邊緣會(huì)默認(rèn)填充,也可以指定邊緣填充方式,具體可以在函數(shù)里查看 img2 = cv.filter2D(img,-1,kernel) print(img2)結(jié)果
2 均值模糊
原理:均值濾波相當(dāng)于對(duì)濾波器范圍內(nèi)的矩陣數(shù)值取均值輸出得到的結(jié)果
?程序?qū)崿F(xiàn)
#讀入一張帶有噪聲的圖片 img = cv.imread('pic/rose_spnoise_200x200.jpg') show(img)顯示
#用一種原始的定義方法實(shí)現(xiàn)均值濾波 K = np.ones((3,3)) / 9img1 = cv.filter2D(img,-1,K) show(np.hstack([img,img1]))結(jié)果
opencv提供函數(shù)實(shí)現(xiàn),下面這兩個(gè)函數(shù)功能是一摸一樣,效果也是一模一樣的
cv.blur(img,(5,5))
cv.boxFilter(img,-1,(5,5))
結(jié)果
img3 = cv.boxFilter(img,-1,(3,3)) show(np.hstack([img,img3]))結(jié)果
3 中值濾波
原理
程序?qū)崿F(xiàn)
img4= cv.medianBlur(img,3) #第二個(gè)數(shù)字必須是3,5,7...這樣的奇數(shù) show(np.hstack([img,img4]))結(jié)果
4 高斯模糊
原理:?高斯模糊卷積核與sigma(方差)的值有關(guān),方差越大越平緩,方差越小越陡峭
?sigma很小時(shí)是幾乎沒(méi)有濾波效果的,sigma很大時(shí)和均值濾波結(jié)果相似
程序?qū)崿F(xiàn)
?img = cv.imread('pic/rose_spnoise_200x200.jpg') show(img)#使用opencv里面提供的函數(shù)實(shí)現(xiàn) cv.GaussianBlur(img,(5,5),sigma) 圖像 卷積核大小 方差 sigma = 0.5img2 = cv.GaussianBlur(img,(5,5),sigmaX=sigma) show(np.hstack([img,img2]))結(jié)果
5 雙邊濾波
原理:可以保留邊緣等高頻信息,平滑顏色(灰度)相近的地方
?不斷計(jì)算卷積核:顏色差異越大,加權(quán)值越小;距離越遠(yuǎn),加權(quán)值越小
?
程序?qū)崿F(xiàn)
img = cv.imread('pic/beer.jpg',0) show(img)#opencv提供函數(shù)實(shí)現(xiàn) cv.bilateralFilter(img,-1,sigmaColor=50,sigmaSpace=3) img2 = cv.bilateralFilter(img,-1,sigmaColor=50,sigmaSpace=3) show(np.hstack([img,img2]))?結(jié)果
總結(jié)
以上是生活随笔為你收集整理的【图像处理opencv】_图像锐化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【图像处理opencv】_图像几何变换
- 下一篇: 【图像处理opencv】_图像边缘