OpenCV學習之平滑(模糊)

2021-10-25 05:52:35 字數 4292 閱讀 4799

void

boxfilter

(inputarray src,

outputarray dst,

int ddepth,

size ksize,

point anchor=

point(-

1,-1

),//意味著定位畫素是核的中心

bool normalize=

true

,int bordertype=border_default)

//該函式是一種盒式濾波,其核係數是相等的。

//對normalize=true,每個輸出畫素值均是其核鄰域的均值,

//其所有係數均等於1/n,此處,n=元素的個數。

//對normalize=false,所有的係數都等於1

void

gaussionblur

(inputarray src,

outputarray dst,

size ksize,

double sigmax,

//在x方向上高斯核的標準偏差(均方差)

double sigmay=0,

//在y方向上高斯核的標準偏差(均方差)

int bordertype=border_default)

//該函式通過對src輸入陣列中的每個點用乙個高斯核計算卷積,產生dst輸出。

//如果sigmay=0, 則將sigmay設定為與sigmax相等;

//如果sigmax和sigmay都設定為0,則使用ksize中給定的寬度和高度計算sigmax和sigmay

void

medianblur

(inputarray src,

outputarray dst,

int ksize)

//該函式作用於影象的每乙個元素,並用鄰域畫素的中值替換每個畫素

void

bilateralfilter

(inputarray src,

outputarray dst,

int d,

//畫素鄰域的直徑

double sigmacolor,

//double sigmaspace,

int bordertype=border_default)

//該函式與高斯濾波類似,考慮將具有權值的鄰域畫素賦值給每乙個畫素,

//但和高斯濾波方法以及另乙個考慮鄰域和被估計畫素之間強度的差值的濾波方法相同,

//每個權值僅有兩個分量。

//引數sigmacolor的乙個較大值意味著畫素鄰域內相差更遠的顏色會被混合,生成的半對等顏色的面積也就越大;

//引數sigmaspace的乙個較大值意味著只要畫素之間的顏色足夠接近,則更遠的畫素之間會相互影響。

void

blur

(inputarray src,

outputarray dst,

size ksize,

point anchor=

point(-

1,-1

),int bordertype=border_default)

//該函式使用歸一化盒式濾波器來模糊一幅影象,

//它等價於使用normalize=true值得boxfilter函式。

在opencv中,用於銳化的函式有:

void

sobel

(inputarray src,

outputarray dst,

int ddepth,

//-1:表示使用和輸入影象相同的深度

int dx,

//希望的導數階

int dy,

//希望的導數階

int ksize=3,

//核大小

double scale=1,

//建立用於計算導數值的尺度因子

double delta=0,

int bordertype=border_default)

//邊界型別

/* 該函式使用sobel運算元計算src中的一幅影象的一階導數、二階導數、三階導數或混合影象導數。*/

void

scharr

(inputarray src,

outputarray dst,

int ddepth,

int dx,

int dy,

double scale=1,

double delta=0,

int bordertype=border_default)

//邊界型別

/* 該函式計算乙個大小為3*3的核更精確的導數。該函式與sobel函式等價。*/

void

laplacian

(inputarray src,

outputarray dst,

int ddepth,

int ksize=1,

double scale=1;

double delta=0,

int bordertype=border_default)

/*該函式計算一幅影象的laplacian值。

在物件檢測問題中,通過檢測整幅影象去試圖找到物件,比較浪費時間。在這種情況下,從較小解析度的一些影象開始進行物件搜尋會更為有效。這種影象集合被形象地稱之為金字塔或多級紋理,因為如果將這**像按照由小到大、從下至上組織,其形式與金字塔結構型別非常相似。

有兩種型別的影象金字塔:高斯金字塔和拉普拉斯金字塔。

高斯金字塔

高斯金字塔的建立方式如下:在更低的一層通過交替地隔行和隔列刪除畫素,然後通過對底層領域進行高斯濾波來獲得更高一層的畫素值。像這樣每執行完金字塔的乙個步驟後,影象的寬和高減少為原來的1/2,其面積減少為上一層影象面積的1/4。在opencv中,可以使用pyrdown, pytup和buildpyramid計算高斯金字塔。

void

pyrdown

(inputarray src,

outputarray dst,

const size& dstsize=

size()

,int bordertype=border_default)

;//該函式下取樣並模糊一幅src影象,將結果儲存在dst中。

//當未設定引數dstsize時,其輸出影象大小使用size((src.clos+1)/2, (src.rows+1)/2)計算。

void

pyrup

(inputarray src,

outputarray dst,

const size& dstsize=

size()

,int bordertype=border_default)

;

void

buildpyramid

(inputarray src,

outputarrayofarrays dst,

int maxlevel,

int bordertype=border_default)

//該函式為儲存在src中的影象建立乙個高斯金字塔,獲得maxlevel幅新影象,

//並將其儲存在dst陣列中。

//其原始影象儲存在dst[0]中,因此結果dst中儲存了maxlevel+1幅影象

void

pyrmeanshiftfiltering

(inputarray src,

outputarray dst,

double sp,

//空間視窗半徑

double sr,

//顏色視窗半徑

int maxlevel=1,

termcriteria termcrit=

termcriteria

(termcriteria::max_iter+termcriteria::eps,5,

1))//該函式實現了均值漂移分割的濾波階段,獲取一幅具有顏色梯度和細粒度紋理平滑的影象dst,

//引數sp

拉普拉斯金字塔

在opencv中,雖然沒有特定的函式來實現拉普拉斯金字塔,但是拉普拉斯金字塔可由高斯金字塔形成。拉普拉斯金字塔可以看成是其大部分元素為0的一些邊界影象,拉普拉斯金字塔的第i層是高斯金字塔中第i層與高斯金字塔中i+1層的擴充版本之間的差。

學習OpenCV 09 平滑 模糊處理

平滑 smoothing 也稱模糊 blurring 是一種簡單而又常用的影象處理操作。其目的有很多,但通常是為了減少雜訊 noise 和偽影 camera artifacts 在降低影象解析度 resolution 時,平滑也是非常重要的。在闡明平滑操作前,需要闡明幾個概念 濾波器 filter ...

學習OpenCV 羽化(模糊邊緣)

原文出處 在photoshop裡,羽化就是使你選定範圍的圖邊緣達到朦朧的效果。羽化值越大,朦朧範圍越寬,羽化值越小,朦朧範圍越窄。可根據你想留下圖的大小來調節。演算法分析 1 通過對rgb值增加額外的v值實現朦朧效果 2 通過控制v值的大小實現範圍控制。3 v 255 當前點point距中點距離的平...

OpenCV學習筆記 模糊操作

模糊操作的作用是在時減低雜訊。模糊操作有均值模糊,中值模糊,高斯模糊和自定義模糊 模糊操作的基本原理 1 基於離散卷積 2 定義好每乙個卷積核 3 不同的卷積核得到不同的卷積效果 4 模糊是卷積的一種表象 均值濾波 用卷積核中的全體畫素的平均值來代替原來畫素值 中值濾波 將卷積核中的全體畫素從小到大...