平滑(模糊)操作: 爲了較少圖片的噪音和僞影,平滑圖像與圖像模糊處理是相同的含義,平滑處理即是通過操作後,使得圖像的像素值與鄰域內其他像素值的的變化程度減小。在一張圖像上,邊緣的像素值是變化程度最劇烈的地方,而其他相對平緩。因此,平滑圖像最直觀的表現是圖像的上物體的邊緣輪廓變得模糊。
有五種不同的平滑操作:
1.簡單模糊和方框性濾波器 blur
2.中值濾波器 medianblur
3.高斯濾波器 (首選) gaussianblur
4.雙邊濾波器 bilateralfilter
5.scharr濾波器
以高斯濾波器來學習。
高斯濾波
是一種線性平滑濾波,適用於消除高斯噪聲,廣泛應用於圖像處理的減噪過程。通俗的講,高斯濾波就是對整幅圖像進行加權平均的過程,每一個像素點的值,都由其本身和鄰域內的其他像素值經過加權平均後得到。高斯濾波的具體操作是:用一個模板(或稱卷積、掩模)掃描圖像中的每一個像素,用模板確定的鄰域內像素的加權平均灰度值去替代模板中心像素點的值。
實質上是一種信號的濾波器,其用途爲信號的平滑處理,數字圖像用於後期應用,其噪聲是最大的問題,因爲誤差會累計傳遞等原因,大多圖像處理教材會在很早的時候介紹Gauss濾波器,用於得到信噪比SNR較高的圖像(反應真實信號)。高斯平滑濾波器對於抑制服從正態分佈的噪聲非常有效。
src:源圖像
dst:目標圖像
borderType:邊緣像素的平滑方式
ksize:濾波器的寬度核高度
sigmax:高斯核在x方向的sigma值(最大值的半寬)
sigmay:在y方向的sigma值
gaussianblur(src,dst,ksize,sigmax,sigmay,bordertype)
生成高斯濾波器
cv::getGaussianKernal()
代碼實現
#include<iostream>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\core\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img, imgGray,result,dst;
img = imread("C:\\Users\\shawn\\Pictures\\Saved Pictures\\1.JPG");
if (!img.data) {
cout << "Please input image path" << endl;
return 0;
}
imshow("原圖", img);
/*cvtColor(img, imgGray, CV_BGR2GRAY);
imshow("灰度圖", imgGray);
threshold(imgGray, result, 100, 255, CV_THRESH_BINARY);
imshow("二值化圖", result);//二值化*/
GaussianBlur(img, dst, Size(7, 7), 0, 0);//平滑操作
//顯示效果圖
imshow("高斯濾波【效果圖】", dst);
waitKey();
destroyAllWindows();
return 0;
}