日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

opencv 图像去噪要点总结

發(fā)布時(shí)間:2025/4/14 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv 图像去噪要点总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
opencv 圖像去噪要點(diǎn)總結(jié)

一 圖像平滑


圖像平滑與圖像模糊是同一概念,主要用于圖像的去噪。平滑要使用濾波器,為不改變圖像的相位信息,一般使用線性濾波器。不同的核函數(shù)代表不同的濾波器,有不同的用途。

常見(jiàn)的濾波器包括:歸一化濾波器,也是均值濾波器,用輸出像素點(diǎn)核窗口內(nèi)的像素均值代替輸出點(diǎn)像素值。
高斯濾波器,實(shí)際中最常用的濾波器,高斯濾波是將輸入數(shù)組的每一個(gè)像素點(diǎn)與 高斯內(nèi)核 卷積將卷積和當(dāng)作輸出像素值。
中值濾波器,中值濾波將圖像的每個(gè)像素用鄰域(以當(dāng)前像素為中心的正方形區(qū)域)像素的中值代替。對(duì)椒鹽噪聲最有效,去除跳變點(diǎn)非常有效。
雙邊濾波器,為避免濾波器平滑圖像去噪的同時(shí)使邊緣也模糊,這種情況下使用雙邊濾波器。

四種濾波方法分別使用到4個(gè)OpenCV函數(shù),這些函數(shù)的前2個(gè)參數(shù)都是原圖像和濾波后圖像。
歸一化濾波器blur的第3個(gè)參數(shù)為濾波核窗口的大小,Size(i,i)表示ixi大小的窗口。
高斯濾波器GaussianBlur第3個(gè)參數(shù)也是濾波核窗口的大小,第4、第5個(gè)參數(shù)分辨表示x方向和y方向的δ。
中值濾波器medianBlur第3個(gè)參數(shù)是濾波器的長(zhǎng)度,該濾波器的窗口為正方形。

雙邊濾波器的函數(shù)原型如下:
//! smooths the image using bilateral filter
CV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?double sigmaColor, double sigmaSpace,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int borderType=BORDER_DEFAULT );

二 圖像代數(shù)運(yùn)算 - 平均值去噪,減去背景

代數(shù)運(yùn)算,就是對(duì)兩幅圖像的點(diǎn)之間進(jìn)行加、減、乘、除的運(yùn)算。
代數(shù)運(yùn)算中比較常用的是圖像相加和相減。圖像相加常用來(lái)求平均值去除addtive噪聲或者實(shí)現(xiàn)二次曝光。
圖像相減用于減去背景或周期噪聲,污染等。

圖像相加
OpenCV中提供了相加的函數(shù)
void cvAcc( ??
? ? ? ? ? ?const CvArr* image,//輸入圖像 ?
? ? ? ? ? ?CvArr* sum, ?//累積圖像 ??
? ? ? ? ? ?const CvArr* mask=NULL//可選的運(yùn)算 ?
?); ?

還需要用到一個(gè)線性變換轉(zhuǎn)換函數(shù)來(lái)對(duì)相加的結(jié)果求平均
void cvConvertScale( ??
? ? ? ? const CvArr* src, //輸入數(shù)組 ?
? ? ? ? CvArr* dst,//輸出數(shù)組 ?
? ? ? ? double scale=1,//比例 ?
? ? ? ? double shift=0 //縮放比例,可選 ?
); ?

曝光和去噪是一樣的,也是對(duì)幾幅圖像求平均。

圖像相減
OpenCV中用cvAbsDiff函數(shù)計(jì)算兩數(shù)組的差的絕對(duì)值

void cvAbsDiff( ??
? ? ? ? const CvArr* src1,//第一個(gè)輸入數(shù)組 ?
? ? ? ? const CvArr* src2,//第二個(gè)輸入數(shù)組 ?
? ? ? ? CvArr* dst//輸出數(shù)組 ?
); ?

減去背景是通過(guò)兩幅圖像代數(shù)相減,可以判斷出前景區(qū)域和運(yùn)動(dòng)區(qū)域,這是最簡(jiǎn)單(很多時(shí)候也是效果很好的)運(yùn)動(dòng)檢測(cè)方法。

三?線性濾波 - 方框?yàn)V波、均值濾波與高斯濾波

一、理論

1.平滑處理
“平滑處理“(smoothing)也稱“模糊處理”(bluring)。平滑處理的用途,最常見(jiàn)的是用來(lái)減少圖像上的噪點(diǎn)或者失真。在涉及到降低圖像分辨率時(shí),平滑處理是非常好用的方法。

2.濾波與濾波器
濾波是將信號(hào)中特定波段頻率濾除的操作,是抑制和防止干擾的一項(xiàng)重要措施。
而濾波器就是建立的一個(gè)數(shù)學(xué)模型,通過(guò)這個(gè)模型來(lái)將圖像數(shù)據(jù)進(jìn)行能量轉(zhuǎn)化,能量低的就排除掉,噪聲就是屬于低能量部分。

一種形象的比喻法是:我們可以把濾波器想象成一個(gè)包含加權(quán)系數(shù)的窗口,當(dāng)使用這個(gè)濾波器平滑處理圖像時(shí),就把這個(gè)窗口放到圖像之上,透過(guò)這個(gè)窗口來(lái)看我們得到的圖像。

在新版本的OpenCV中,提供了如下五種常用的圖像平滑處理操作方法,且他們分別被封裝在單獨(dú)的函數(shù)中,

方框?yàn)V波——boxblur函數(shù)
均值濾波——blur函數(shù)
高斯濾波——GaussianBlur函數(shù)
中值濾波——medianBlur函數(shù)
雙邊濾波——bilateralFilter函數(shù)

3.線性濾波器
線性濾波器:線性濾波器經(jīng)常用于剔除輸入信號(hào)中不想要的頻率或者從許多頻率中選擇一個(gè)想要的頻率。

幾種常見(jiàn)的線性濾波器:
允許低頻率通過(guò)的 低通濾波器 。
允許高頻率通過(guò)的 高通濾波器 。
允許一定范圍頻率通過(guò)的 帶通濾波器 。
阻止一定范圍頻率通過(guò)并且允許其它頻率通過(guò)的 帶阻濾波器 。
允許所有頻率通過(guò)、僅僅改變相位關(guān)系的 全通濾波器 。
阻止一個(gè)狹窄頻率范圍通過(guò)的特殊 帶阻濾波器 , 陷波濾波器 (Band-stop filter)。

4.關(guān)于濾波和模糊
濾波是將信號(hào)中特定波段頻率濾除的操作。

高斯濾波是指用高斯函數(shù)作為濾波函數(shù)的濾波操作 ,至于是不是模糊,要看是高斯低通還是高斯高通,低通就是模糊,高通就是銳化。

5.線性濾波
線性濾波是一種常用的鄰域算子,像素的輸出值取決于輸入像素的加權(quán)和。

6.方框?yàn)V波(box Filter)
void boxFilter(InputArray src,OutputArray dst, int ddepth, Size ksize, Point?
anchor=Point(-1,-1), boolnormalize=true, int borderType=BORDER_DEFAULT )

第一個(gè)參數(shù),InputArray類型的src,輸入圖像,即源圖像,填Mat類的對(duì)象即可。該函數(shù)對(duì)通道是獨(dú)立處
理的,且可以處理任意通道數(shù)的圖片,但需要注意,待處理的圖片深度應(yīng)該為CV_8U, CV_16U, CV_16S,?
CV_32F 以及 CV_64F之一。
第二個(gè)參數(shù),OutputArray類型的dst,即目標(biāo)圖像,需要和源圖片有一樣的尺寸和類型。
第三個(gè)參數(shù),int類型的ddepth,輸出圖像的深度,-1代表使用原圖深度,即src.depth()。
第四個(gè)參數(shù),Size類型(對(duì)Size類型稍后有講解)的ksize,內(nèi)核的大小。一般這樣寫(xiě)Size( w,h )來(lái)表示
內(nèi)核的大小( 其中,w 為像素寬度, h為像素高度)。Size(3,3)就表示3x3的核大小,Size(5,5)就表
示5x5的核大小
第五個(gè)參數(shù),Point類型的anchor,表示錨點(diǎn)(即被平滑的那個(gè)點(diǎn)),注意他有默認(rèn)值Point(-1,-1)。如
果這個(gè)點(diǎn)坐標(biāo)是負(fù)值的話,就表示取核的中心為錨點(diǎn),所以默認(rèn)值Point(-1,-1)表示這個(gè)錨點(diǎn)在核的中心

第六個(gè)參數(shù),bool類型的normalize,默認(rèn)值為true,一個(gè)標(biāo)識(shí)符,表示內(nèi)核是否被其區(qū)域歸一化
(normalized)了。
第七個(gè)參數(shù),int類型的borderType,用于推斷圖像外部像素的某種邊界模式。有默認(rèn)值BORDER_DEFAULT
,一般不去管它。

均值濾波是方框?yàn)V波歸一化(normalized)后的特殊情況。其中,歸一化就是把要處
理的量都縮放到一個(gè)范圍內(nèi),比如(0,1),以便統(tǒng)一處理和直觀量化。

而非歸一化(Unnormalized)的方框?yàn)V波用于計(jì)算每個(gè)像素鄰域內(nèi)的積分特性,比如密集光流算法
(dense optical flow algorithms)中用到的圖像倒數(shù)的協(xié)方差矩陣(covariance matrices of image?
derivatives)

如果我們要在可變的窗口中計(jì)算像素總和,可以使用integral()函數(shù)。

7.均值濾波
均值濾波,是最簡(jiǎn)單的一種濾波操作,輸出圖像的每一個(gè)像素是核窗口內(nèi)輸入圖像對(duì)應(yīng)像素的像素的平均
值( 所有像素加權(quán)系數(shù)相等),其實(shí)說(shuō)白了它就是歸一化后的方框?yàn)V波。

均值濾波是典型的線性濾波算法,主要方法為鄰域平均法,即用一片圖像區(qū)域的各個(gè)像素的均值來(lái)代替原
圖像中的各個(gè)像素值。一般需要在圖像上對(duì)目標(biāo)像素給出一個(gè)模板(內(nèi)核),該模板包括了其周?chē)呐R近
像素(比如以目標(biāo)像素為中心的周?chē)?(3x3-1)個(gè)像素,構(gòu)成一個(gè)濾波模板,即去掉目標(biāo)像素本身)。再
用模板中的全體像素的平均值來(lái)代替原來(lái)像素值。即對(duì)待處理的當(dāng)前像素點(diǎn)(x,y),選擇一個(gè)模板,該
模板由其近鄰的若干像素組成,求模板中所有像素的均值,再把該均值賦予當(dāng)前像素點(diǎn)(x,y),作為處
理后圖像在該點(diǎn)上的灰度個(gè)g(x,y),即個(gè)g(x,y)=1/m ∑f(x,y) ,其中m為該模板中包含當(dāng)前像
素在內(nèi)的像素總個(gè)數(shù)。

均值濾波的缺陷
它不能很好地保護(hù)圖像細(xì)節(jié),在圖像去噪的同時(shí)也破壞了圖像的細(xì)節(jié)部分,從而使圖像變得模糊,不能很好地去除噪聲點(diǎn)。

blur 函數(shù)的原型:
void blur(InputArray src, OutputArraydst, Size ksize, Point anchor=Point(-1,-1), int?
borderType=BORDER_DEFAULT )

第一個(gè)參數(shù),InputArray類型的src,輸入圖像,即源圖像,填Mat類的對(duì)象即可。該函數(shù)對(duì)通道是獨(dú)立處
理的,且可以處理任意通道數(shù)的圖片,但需要注意,待處理的圖片深度應(yīng)該為CV_8U, CV_16U, CV_16S,?
CV_32F 以及 CV_64F之一。
第二個(gè)參數(shù),OutputArray類型的dst,即目標(biāo)圖像,需要和源圖片有一樣的尺寸和類型。比如可以用
Mat::Clone,以源圖片為模板,來(lái)初始化得到如假包換的目標(biāo)圖。
第三個(gè)參數(shù),Size類型(對(duì)Size類型稍后有講解)的ksize,內(nèi)核的大小。一般這樣寫(xiě)Size( w,h )來(lái)表示
內(nèi)核的大小( 其中,w 為像素寬度, h為像素高度)。Size(3,3)就表示3x3的核大小,Size(5,5)就表
示5x5的核大小
第四個(gè)參數(shù),Point類型的anchor,表示錨點(diǎn)(即被平滑的那個(gè)點(diǎn)),注意他有默認(rèn)值Point(-1,-1)。如
果這個(gè)點(diǎn)坐標(biāo)是負(fù)值的話,就表示取核的中心為錨點(diǎn),所以默認(rèn)值Point(-1,-1)表示這個(gè)錨點(diǎn)在核的中心

第五個(gè)參數(shù),int類型的borderType,用于推斷圖像外部像素的某種邊界模式。有默認(rèn)值BORDER_DEFAULT
,一般不去管它。

8.高斯濾波
高斯濾波是一種線性平滑濾波,適用于消除高斯噪聲,廣泛應(yīng)用于圖像處理的減噪過(guò)程。高斯濾波就是對(duì)
整幅圖像進(jìn)行加權(quán)平均的過(guò)程,每一個(gè)像素點(diǎn)的值,都由其本身和鄰域內(nèi)的其他像素值經(jīng)過(guò)加
權(quán)平均后得到。高斯濾波的具體操作是:用一個(gè)模板(或稱卷積、掩模)掃描圖像中的每一個(gè)像素,用模
板確定的鄰域內(nèi)像素的加權(quán)平均灰度值去替代模板中心像素點(diǎn)的值。

高斯模糊技術(shù)生成的圖像,其視覺(jué)效果就像是經(jīng)過(guò)一個(gè)半透明屏幕在觀察圖像,這與鏡頭焦外成像效果散
景以及普通照明陰影中的效果都明顯不同。高斯平滑也用于計(jì)算機(jī)視覺(jué)算法中的預(yù)先處理階段,以增強(qiáng)圖
像在不同比例大小下的圖像效果(參見(jiàn)尺度空間表示以及尺度空間實(shí)現(xiàn))。從數(shù)學(xué)的角度來(lái)看,圖像的高
斯模糊過(guò)程就是圖像與正態(tài)分布做卷積。由于正態(tài)分布又叫作高斯分布,所以這項(xiàng)技術(shù)就叫作高斯模糊。
圖像與圓形方框模糊做卷積將會(huì)生成更加精確的焦外成像效果。由于高斯函數(shù)的傅立葉變換是另外一個(gè)高
斯函數(shù),所以高斯模糊對(duì)于圖像來(lái)說(shuō)就是一個(gè)低通濾波操作。

? 高斯濾波器是一類根據(jù)高斯函數(shù)的形狀來(lái)選擇權(quán)值的線性平滑濾波器。高斯平滑濾波器對(duì)于抑制服從正
態(tài)分布的噪聲非常有效。
對(duì)于圖像處理來(lái)說(shuō),常用二維零均值離散高斯函數(shù)作平滑濾波器。

void GaussianBlur(InputArray src,OutputArray dst, Size ksize, double sigmaX, double?
sigmaY=0, intborderType=BORDER_DEFAULT )

第一個(gè)參數(shù),InputArray類型的src,輸入圖像,即源圖像,填Mat類的對(duì)象即可。它可以是單獨(dú)的任意通
道數(shù)的圖片,但需要注意,圖片深度應(yīng)該為CV_8U,CV_16U, CV_16S, CV_32F 以及 CV_64F之一。
第二個(gè)參數(shù),OutputArray類型的dst,即目標(biāo)圖像,需要和源圖片有一樣的尺寸和類型。比如可以用
Mat::Clone,以源圖片為模板,來(lái)初始化得到如假包換的目標(biāo)圖。
第三個(gè)參數(shù),Size類型的ksize高斯內(nèi)核的大小。其中ksize.width和ksize.height可以不同,但他們都必
須為正數(shù)和奇數(shù)。或者,它們可以是零的,它們都是由sigma計(jì)算而來(lái)。
第四個(gè)參數(shù),double類型的sigmaX,表示高斯核函數(shù)在X方向的的標(biāo)準(zhǔn)偏差。
第五個(gè)參數(shù),double類型的sigmaY,表示高斯核函數(shù)在Y方向的的標(biāo)準(zhǔn)偏差。若sigmaY為零,就將它設(shè)為
sigmaX,如果sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height計(jì)算出來(lái)。
為了結(jié)果的正確性著想,最好是把第三個(gè)參數(shù)Size,第四個(gè)參數(shù)sigmaX和第五個(gè)參數(shù)sigmaY全部指定到。
第六個(gè)參數(shù), int類型的borderType,用于推斷圖像外部像素的某種邊界模式。有默認(rèn)值BORDER_DEFAULT
,一般不去管它。

二、相關(guān)OpenCV源碼流程

OpenCV中線性濾波函數(shù)——boxFilter,blur和GaussianBlur函數(shù)以及涉及到的源碼的流程。

1 OpenCV中boxFilter函數(shù)

OpenCV的安裝路徑的\sources\modules\imgproc\src下的smooth.cpp源文件

boxFilter()函數(shù)
代碼作用:進(jìn)行box Filter濾波操作的函數(shù)
OpenCV源代碼版本:2.4.8
源碼路徑:…\opencv\sources\modules\imgproc\src\smooth.cpp

流程
拷貝源圖的形參Mat數(shù)據(jù)到臨時(shí)變量,用于稍后的操作
定義int型臨時(shí)變量,代表源圖深度的sdepth,源圖通道的引用cn
處理ddepth小于零的情況
初始化目標(biāo)圖
拷貝目標(biāo)圖的形參Mat數(shù)據(jù)到臨時(shí)變量,用于稍后的操作
處理 borderType不為 BORDER_CONSTANT 且normalize為真的情況
若之前有過(guò)HAVE_TEGRA_OPTIMIZATION優(yōu)化選項(xiàng)的定義,則執(zhí)行宏體中的tegra優(yōu)化版函數(shù)并返回
調(diào)用FilterEngine濾波引擎,正式開(kāi)始濾波操作

其中的Ptr是用來(lái)動(dòng)態(tài)分配的對(duì)象的智能指針模板類。可以發(fā)現(xiàn),函數(shù)的內(nèi)部代碼思路是很清晰的,先拷貝源圖的形參Mat數(shù)據(jù)到臨時(shí)變量,定義一些臨時(shí)變量,在處理ddepth小于零的情況,接著處理?
borderType不為 BORDER_CONSTANT 且normalize為真的情況,最終調(diào)用FilterEngine濾波引擎創(chuàng)建一個(gè)
BoxFilter,正式開(kāi)始濾波操作。

這里的FilterEngine是OpenCV圖像濾波功能的核心引擎。

2 FilterEngine 類 - OpenCV圖像濾波核心引擎

各種濾波函數(shù)比如blur, GaussianBlur,到頭來(lái)其實(shí)是就是在函數(shù)末尾處定義了一個(gè)Ptr<FilterEngine>類型的f,然后f->apply( src, dst )了一下而已。
這個(gè)類可以把幾乎是所有的濾波操作施加到圖像上。它包含了所有必要的中間緩存器。有很多和濾波相關(guān)
的create系函數(shù)的返回值直接就是Ptr<FilterEngine>。

其中的Ptr是用來(lái)動(dòng)態(tài)分配的對(duì)象的智能指針模板類,而上面的尖括號(hào)里面的模板參數(shù)就是FilterEngine。

使用FilterEngine類可以分塊處理大量的圖像,構(gòu)建復(fù)雜的管線,其中就包含一些進(jìn)行濾波階段。如果我
們需要使用預(yù)先定義好的的濾波操作,cv::filter2D(), cv::erode(),以及cv::dilate(),可以選擇,他
們不依賴于FilterEngine,在自己函數(shù)體內(nèi)部就實(shí)現(xiàn)了FilterEngine提供的功能。不像其他的諸如blur系列函數(shù),依賴于FilterEngine引擎。

FilterEngine類源代碼流程
代碼作用:FilterEngine類,OpenCV圖像濾波功能的核心引擎
OpenCV源代碼版本:2.4.8
源碼路徑:…\opencv\sources\modules\imgproc\include\opencv2\imgproc\imgproc.hpp
?
默認(rèn)構(gòu)造函數(shù)
完整的構(gòu)造函數(shù)
默認(rèn)析構(gòu)函數(shù)
重新初始化引擎。釋放之前濾波器申請(qǐng)的內(nèi)存。
開(kāi)始對(duì)指定了ROI區(qū)域和尺寸的圖片進(jìn)行濾波操作
開(kāi)始對(duì)指定了ROI區(qū)域的圖片進(jìn)行濾波操作
處理圖像的下一個(gè)srcCount行(函數(shù)的第三個(gè)參數(shù))
對(duì)圖像指定的ROI區(qū)域進(jìn)行濾波操作,若srcRoi=(0,0,-1,-1),則對(duì)整個(gè)圖像進(jìn)行濾波操作
如果濾波器可分離,則返回true
返回輸入和輸出行數(shù)
一些成員參數(shù)定義

3 OpenCV中size類型剖析

……\opencv\sources\modules\core\include\opencv2\core\core.hpp路徑下

原型聲明
typedef Size_<int> Size2i;
typedef Size2i Size;

Size_ 是個(gè)模板類,在這里Size_<int>表示其類體內(nèi)部的模板所代表的類型為int。
首先給已知的數(shù)據(jù)類型Size_<int>起個(gè)新名字,叫Size2i。
然后又給已知的數(shù)據(jù)類型Size2i起個(gè)新名字,叫Size。
連起來(lái)就是,Size_<int>、Size2i、Size這三個(gè)類型名等價(jià)。

Size_模板類的定義:
OpenCV源代碼版本:2.4.8
源碼路徑:…\opencv\sources\modules\core\include\opencv2\core\core.hpp

不同的構(gòu)造函數(shù)定義
區(qū)域(width*height)
轉(zhuǎn)化另一種數(shù)據(jù)類型。
轉(zhuǎn)換為舊式的OpenCV類型.
寬度和高度,常用屬性

可以看到Size_模板類的內(nèi)部又是重載了一些構(gòu)造函數(shù)以滿足我們的需要,其中,我們用得最多的是如下
這個(gè)構(gòu)造函數(shù):
Size_(_Tp _width, _Tp _height);

另外,代碼末尾定義了模板類型的寬度和高度:
_Tp width, height; //寬度和高度
于是我們可以用XXX. width和XXX.height來(lái)分別表示其寬度和高度。

一個(gè)示例,方便理解:
Size(5, 5);//構(gòu)造出的Size寬度和高度都為5,即XXX.width和XXX.height都為5

4 OpenCV中blur函數(shù)源碼剖析


blur
代碼作用:進(jìn)行blur均值濾波操作的函數(shù)
OpenCV源代碼版本:2.4.8
源碼路徑:…\opencv\sources\modules\imgproc\src\smooth.cpp

流程
調(diào)用boxFilter函數(shù)進(jìn)行處理

可以看到在blur函數(shù)內(nèi)部就是調(diào)用了一個(gè)boxFilter函數(shù),且第六個(gè)參數(shù)為true,即上文所說(shuō)的
normalize=true,即均值濾波是均一化后的方框?yàn)V波。

5 GaussianBlur函數(shù)源碼流程


代碼作用:封裝高斯濾波的GaussianBlur()函數(shù)
OpenCV源代碼版本:2.4.8
源碼路徑:…\opencv\sources\modules\imgproc\src\smooth.cpp

流程:
拷貝形參Mat數(shù)據(jù)到臨時(shí)變量,用于稍后的操作
處理邊界選項(xiàng)不為BORDER_CONSTANT時(shí)的情況
若ksize長(zhǎng)寬都為1,將源圖拷貝給目標(biāo)圖
若之前有過(guò)HAVE_TEGRA_OPTIMIZATION優(yōu)化選項(xiàng)的定義,則執(zhí)行宏體中的tegra優(yōu)化版函數(shù)并返回
如果HAVE_IPP&& (IPP_VERSION_MAJOR >= 7為真,則執(zhí)行宏體中語(yǔ)句
調(diào)動(dòng)濾波引擎,正式進(jìn)行高斯濾波操作

三、線性濾波函數(shù)調(diào)用示例

1 boxFilter函數(shù)——方框?yàn)V波

調(diào)用代碼示范:

? ? ? ?//載入原圖
? ? ? ?Matimage=imread("2.jpg");
? ? ? ?//進(jìn)行均值濾波操作
? ? ? ?Matout;
? ? ? ?boxFilter(image, out, -1,Size(5, 5));

2 blur函數(shù)——均值濾波
調(diào)用代碼示范:

? ? ? ?//載入原圖
? ? ? ?Matimage=imread("1.jpg");
? ? ? ?//進(jìn)行均值濾波操作
? ? ? ?Matout;
? ? ? ?blur(image, out, Size(7, 7));

3 GaussianBlur函數(shù)——高斯濾波
調(diào)用示例:

//載入原圖
? ? ? ?Matimage=imread("1.jpg");
? ? ? ?//進(jìn)行濾波操作
? ? ? ?Matout;
? ? ? ?blur(image, out, Size(5, 5));

四、圖像線性濾波綜合示例

示例程序中用軌跡條來(lái)控制三種線性濾波的核參數(shù)值,通過(guò)滑動(dòng)滾動(dòng)條,控制圖像在三種
線性濾波下的模糊度。

主要代碼如下;

......
//全局變量聲明
Matg_srcImage,g_dstImage1,g_dstImage2,g_dstImage3;//存儲(chǔ)圖片的Mat類型
int g_nBoxFilterValue=3; ?//方框?yàn)V波參數(shù)值
int g_nMeanBlurValue=3; ?//均值濾波參數(shù)值
int g_nGaussianBlurValue=3; ?//高斯濾波參數(shù)值

......
//全局函數(shù)聲明
//四個(gè)軌跡條的回調(diào)函數(shù)
static void on_BoxFilter(int, void *); ? ? //均值濾波
static void on_MeanBlur(int, void *); ? ?//均值濾波
static void on_GaussianBlur(int, void *); ? ? ?//高斯濾波
?
//改變console字體顏色
system("color5E");?

//載入原圖
g_srcImage= imread( "1.jpg", 1 );
if(!g_srcImage.data ) { printf("Oh,no,讀取srcImage錯(cuò)誤~!\n"); return false; }
?
//克隆原圖到三個(gè)Mat類型中
g_dstImage1= g_srcImage.clone( );
g_dstImage2= g_srcImage.clone( );
g_dstImage3= g_srcImage.clone( );
?
//顯示原圖
namedWindow("<0>原圖窗口", 1);
imshow("<0>原圖窗口",g_srcImage);
?
//方框?yàn)V波
namedWindow("<1>方框?yàn)V波", 1);
//創(chuàng)建軌跡條
createTrackbar("內(nèi)核值:", "<1>方框?yàn)V波",&g_nBoxFilterValue, 40,on_BoxFilter );
on_MeanBlur(g_nBoxFilterValue,0);
imshow("<1>方框?yàn)V波", g_dstImage1);

//均值濾波
namedWindow("<2>均值濾波", 1);
createTrackbar("內(nèi)核值:", "<2>均值濾波",&g_nMeanBlurValue, 40,on_MeanBlur );
on_MeanBlur(g_nMeanBlurValue,0);

//高斯濾波
namedWindow("<3>高斯濾波", 1);
createTrackbar("內(nèi)核值:", "<3>高斯濾波",&g_nGaussianBlurValue, 40,on_GaussianBlur );

on_GaussianBlur(g_nGaussianBlurValue,0);


......

//方框?yàn)V波操作的回調(diào)函數(shù)

static void on_BoxFilter(int, void *)
{
? //方框?yàn)V波操作
? boxFilter(g_srcImage, g_dstImage1, -1,Size( g_nBoxFilterValue+1, g_nBoxFilterValue+1));
? //顯示窗口
? imshow("<1>方框?yàn)V波", g_dstImage1);
}
?
//均值濾波操作的回調(diào)函數(shù)
static void on_MeanBlur(int, void *)
{
? //均值濾波操作
? blur(g_srcImage, g_dstImage2, Size( g_nMeanBlurValue+1, g_nMeanBlurValue+1),Point(-1,-1));
? //顯示窗口
? imshow("<2>均值濾波", g_dstImage2);
}
??
//高斯濾波操作的回調(diào)函數(shù)
static void on_GaussianBlur(int, void *)
{
? //高斯濾波操作
? GaussianBlur(g_srcImage, g_dstImage3, Size(?
g_nGaussianBlurValue*2+1,g_nGaussianBlurValue*2+1 ), 0, 0);
? //顯示窗口
? imshow("<3>高斯濾波", g_dstImage3);
}

總結(jié)

以上是生活随笔為你收集整理的opencv 图像去噪要点总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。