C++?opencv圖像平滑濾波器使用示例
前言
圖像平滑是一種實(shí)用的數(shù)字圖像處理技術(shù),一個(gè)較好的平滑處理方法既能消除圖像噪聲,又不使圖像邊緣輪廓和線條變模糊。
一、均值濾波
歸一化方框?yàn)V波器是很簡單的濾波器,輸出像素值是核窗口內(nèi)像素值的均值,如果使用歸一化處理,方框?yàn)V波就是均值濾波,實(shí)際上均值濾波是方框?yàn)V波歸一化后的特殊情況。均值不能很好的保護(hù)細(xì)節(jié)。
1.均值濾波函數(shù)
opencv提供了blur函數(shù)來實(shí)現(xiàn)均值濾波,函數(shù)聲明如下:
void blur(InputArray src, OutputArray dst, Size ksize, Point anchor = Point(-1, -1), int borderType = BORDER_DEFAULT); src 輸入圖像 dst 輸出圖像 Ksize 內(nèi)核的大小 anchor 錨點(diǎn) 默認(rèn)值Point(-1, - 1)表示錨位于內(nèi)核中心。 bordertype 邊界像素模式
2.均值濾波代碼
#include<iostream> #include<opencv.hpp> using namespace std; using namespace cv; int main() { Mat img1, img2; img1 = imread("貓1.jpg"); imshow("原圖", img1); blur(img1, img2, Size(20, 20)); imshow("線性濾波", img2); waitKey(0); }
效果如下:
二、高斯濾波
高斯濾波是一種線性平滑濾波,對(duì)于除去高斯噪聲有很好的效果,高斯濾波是對(duì)輸入數(shù)組的每個(gè)點(diǎn)與輸入的高斯濾波模板執(zhí)行卷積計(jì)算,然后精這些結(jié)果一塊組成濾波后的輸出數(shù)組,具體操作是,用一個(gè)模板(或者卷積,掩模)掃描圖像中的每一個(gè)像素,用模板確定的鄰域內(nèi)像素的加權(quán)平均灰度值,去代替模板中心像素點(diǎn)的值。
1.高斯濾波函數(shù)
opencv提供了GaussianBlur函數(shù)來實(shí)現(xiàn)均值濾波,函數(shù)聲明如下:
void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY = 0, int borderType = BORDER_DEFAULT); src 輸入圖像 dst 輸出圖像 ksize 高斯核大小 他們必須是奇數(shù) sigmax x方向上是高斯核標(biāo)準(zhǔn)差 sigmay y方向上是高斯核標(biāo)準(zhǔn)差 bordertype 邊界像素模式
2.高斯濾波代碼
int main() { Mat img1, img2; img1 = imread("貓1.jpg"); imshow("原圖", img1); GaussianBlur(img1, img2, Size(35, 35),0); imshow("高斯濾波", img2); waitKey(0); }
效果圖:
三、中值濾波
中值濾波是用像素點(diǎn)領(lǐng)域灰度值的中值來代替該像素點(diǎn)的灰度值,也就是說用一片區(qū)域的中間值來代替所有值,可以去除最大值和最小值 ,它的優(yōu)點(diǎn)是對(duì)去除斑點(diǎn)噪聲和椒鹽噪聲很有用,缺點(diǎn)是中值濾波時(shí)間是均值濾波的5倍以上
1.中值濾波函數(shù)
opencv提供了medianBlur函數(shù)來實(shí)現(xiàn)均值濾波,函數(shù)聲明如下:
void medianBlur(InputArray src, OutputArray dst, int ksize); src 輸入 dst 輸出 Ksize 孔徑線性尺寸 它必須是奇數(shù)且大于1
2.中值濾波代碼
int main() { Mat img1, img2; img1 = imread("貓1.jpg"); imshow("原圖", img1); medianBlur(img1, img2,9); imshow("中值濾波", img2); waitKey(0); }
效果如下:
四、雙邊濾波
之前所說的濾波器都是為了平滑圖像,問題是有些時(shí)候這些濾波器不僅削弱了噪聲,連帶著吧邊緣也磨掉了,為了避免這樣的情形(至少在一定程度上),我們可以使用雙邊濾波,它是一種非線性濾波器,它可以達(dá)到邊緣,降噪平滑的效果,也是采用加權(quán)平均的方法,用周邊像素亮度值的加權(quán)平均代表某個(gè)像素的強(qiáng)度。雙邊濾波與高斯濾波相比,對(duì)于圖像的邊緣信息能夠更好的保存
1.雙邊濾波函數(shù)
opencv提供了bilateralFilter函數(shù)來實(shí)現(xiàn)均值濾波,函數(shù)聲明如下:
void bilateralFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType = BORDER_DEFAULT); src 輸入 dst 輸出 d 濾波時(shí)所用的每個(gè)像素鄰域的直徑 sigmaColor 在顏色空間中過濾。 sigmaSpace 在坐標(biāo)空間中過濾 borderType 邊界像素模式
2.雙邊濾波代碼
int main() { Mat img1, img2; img1 = imread("貓1.jpg"); imshow("原圖", img1); bilateralFilter(img1, img2, 30,30,30); imshow("雙邊濾波", img2); waitKey(0); }
效果如下:
總結(jié)
以上就是本文全部內(nèi)容,簡單介紹了線性濾波(均值濾波和高斯濾波)和非線性濾波(中值濾波和雙邊濾波),更多關(guān)于opencv圖像平滑的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(44.外卡匹配)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(44.外卡匹配),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++實(shí)現(xiàn)點(diǎn)云添加高斯噪聲功能
所謂高斯噪聲是指它的概率密度函數(shù)服從高斯分布(即正態(tài)分布)的一類噪聲,這篇文章主要給大家介紹了關(guān)于C++實(shí)現(xiàn)點(diǎn)云添加高斯噪聲功能的相關(guān)資料,需要的朋友可以參考下2021-07-07Windows配置VSCode+CMake+Ninja+Boost.Test的C++開發(fā)環(huán)境(教程詳解)
這篇文章主要介紹了Windows配置VSCode+CMake+Ninja+Boost.Test的C++開發(fā)環(huán)境,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05C++實(shí)現(xiàn)藍(lán)橋杯競賽題目---搭積木
這篇文章主要介紹了C++實(shí)現(xiàn)藍(lán)橋杯競賽題目---搭積木,本篇文章通過題目分析列舉公式進(jìn)行分析算法,包含詳細(xì)的圖文,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07Qt實(shí)戰(zhàn)之實(shí)現(xiàn)圖片瀏覽器
這篇文章主要為大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)簡易的圖片瀏覽器,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下2023-03-03C語言深入探索動(dòng)態(tài)內(nèi)存分配的使用
給數(shù)組分配多大的空間?你是否和初學(xué)C時(shí)的我一樣,有過這樣的疑問。這一期就來聊一聊動(dòng)態(tài)內(nèi)存的分配,讀完這篇文章,你可能對(duì)內(nèi)存的分配有一個(gè)更好的理解2022-04-04C++中delete和delete[]的區(qū)別詳細(xì)介紹
一直對(duì)C++中的delete和delete[]的區(qū)別不甚了解,今天遇到了,上網(wǎng)查了一下,得出了結(jié)論,拿出來和大家分享一下2012-11-11全面解析C++中的new,operator new與placement new
以下是C++中的new,operator new與placement new進(jìn)行了詳細(xì)的說明介紹,需要的朋友可以過來參考下2013-09-09