OpenCV中濾波器的操作

2021-09-24 16:04:46 字數 2339 閱讀 9384

影象濾波分為空域濾波和頻域濾波兩個,這篇隨筆主要針對空域濾波。

當然空域與頻域之間是有一定關係的,比如均值濾波器,就是一種低通濾波,而像邊緣檢測,空域中一般使用的是拉普拉斯運算元,其也是一種高通濾波。0-1

0-14-1

0-10

這個表示的是縱橫兩個方向的二階導,將這個運算元應在影象上可以得到影象的邊緣痕跡,如果把邊緣再疊加到影象上,則可以是邊緣更加明顯,這個操作叫做銳化處理,銳化處理的運算元可以表示為:0-1

0-15-1

0-10

之前我們知道使用指標來操作畫素,格式為:

資料型別* 指標名稱 = 矩陣名稱.ptr《資料型別》(行數);

使用運算元時一般我們要同時處理3行以上,我們只需要同時建立這些指標即可。

在這個操作中,我們儲存原來的影象,因此我們建立的指標型別為const,同時我們新載入一幅影象,建立普通指標來操作:

void sharpen(cv::mat image,cv::mat sharpen_image)

}sharpen_image.row(

0).setto(cv::scalar(0, 0, 0

));sharpen_image.row(sharpen_image.rows-1).setto(cv::scalar(0, 0, 0

));sharpen_image.col(

0).setto(cv::scalar(0, 0, 0

));sharpen_image.col(sharpen_image.cols - 1).setto(cv::scalar(0, 0, 0

));

這裡我使用了uchar型,好處是可以處理各種型別的影象,若是灰度影象,下面4行的cv::scalar(0,0,0)需要變成cv::scalar(0);若只處理rgb影象,也可以使用cv::vec3b型:

void sharpenrgb(cv::mat image, cv::mat sharpen_image)

}sharpen_image.row(

0).setto(cv::scalar(0, 0, 0

));sharpen_image.row(sharpen_image.rows - 1).setto(cv::scalar(0, 0, 0

));sharpen_image.col(

0).setto(cv::scalar(0, 0, 0

));sharpen_image.col(sharpen_image.cols - 1).setto(cv::scalar(0, 0, 0

));

影象處理結果如下:

顏色對比度鮮明er。

當然這個程式是純手動擋的,opencv提供給了我們一些縣城的函式,讓我們直接可以基於運算元進行運算:

cv::filter2d(輸入影象名稱,輸出影象名稱,輸入影象名稱.depth(),kernel);

kernel指代核心,即運算元模型,其定義方法為:

cv::mat kernel(3(尺寸),3(尺寸),cv_32f(浮點數),cv::scalar(0)(所有元素初始化為0);

kernel.at(1,1)=5.0;

kernel.at(0,1)=-1.0;

kernel.at(1,0)=-1.0;

kernel.at(2,1)=-1.0;

kernel.at(1,2)=-1.0;

這樣可以提高效率,並易於改變運算元進行新的運算。

均值濾波器在opencv中用blur(模糊)定義,函式為:

cv::blur(輸入名稱,輸出名稱,cv::size(5(尺寸),5(尺寸)));

這是為了讓臨近的畫素具有更高的權值,所以在清晰度上相比於一般均值濾波有很大突破,實現**為:

cv::gaussianblur(image, result, cv::size(5, 5),1.5); 代表方差

對於椒鹽雜訊來說,最好的處理辦法即是中值濾波,中值濾波在opencv中也有直接的辦法:

cv::medianblur(輸入名稱,輸出名稱,int 濾波器尺寸);

opencv 高通濾波器

高通濾波器 高通濾波器 high pass filter,hpf 是檢測影象的某個區域,然後根據畫素與周圍畫素的亮度差值來提公升 boost 該畫素的亮度的濾波器。高通濾波器是根據畫素與鄰近畫素的亮度差值來提公升該畫素的亮度。低通濾波器 low pass filter,lpf 則是在畫素與周圍畫素的...

opencv幾種濾波器介紹

因為平時能用到各種濾波器,但是對各種濾波器效果並不清楚,現在準備把逐漸能用到的濾波器寫下來,方便自己以後查閱。1.中值濾波 中值濾波器是一種非線性濾波器,常用於消除影象中的椒鹽雜訊。與低通濾波不同的是,中值濾波有利於保留邊緣的尖銳度,但它會洗去均勻介質區域中的紋理。適用於椒鹽雜訊 椒鹽雜訊是由影象感...

OpenCV濾波器核心Kernel

在影象處理中許多濾波器 濾波函式 都會使用核 kernel 那麼什麼是核呢?核其實是一組權重,決定了如何利用某乙個點周圍的畫素點來計算新的畫素點,核也被稱為卷積矩陣,對乙個區域的畫素做調和或者卷積運算,通常基於核的濾波器被稱為卷積濾波器。opencv中的filter2d 函式,可以運用由使用者指定的...