學習c++版opencv3.4之9-模糊影象
阿新 • • 發佈:2018-12-11
影象模糊:為了降低影象噪聲。
常見的為Smooth, blur,它們利用卷積計算實現,這些卷積運算元都是線性操作,所以又稱為線性濾波。
均值濾波核的權重都為1,最終畫素取個結果和的均值,最終導致影象各個區域的畫素值比較均勻,無法克服邊緣畫素資訊丟失。
高斯濾波核的權重是一個高斯分佈的值,濾波後較大的畫素值仍然較大,因此影象會保留原有的特點,但只是部分地克服了邊緣資訊的丟失,無法完全避免,因為沒有考慮畫素值的不同。
均值濾波(模糊):blur(src, dst, Size(5, 5));
高斯濾波(模糊):GaussianBlur(src, dst2, Size(5, 5), 11);
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace std; using namespace cv; int main(){ Mat src, dst; src = imread("/Users/ming/Documents/test.jpg"); if (!src.data){ printf("cannot load image ..."); return -1; } namedWindow("src img", CV_WINDOW_AUTOSIZE); imshow("src img", src); blur(src, dst, Size(5, 5)); //均值模糊 namedWindow("blur img", CV_WINDOW_AUTOSIZE); imshow("blur img", dst); Mat dst2; GaussianBlur(src, dst2, Size(5, 5), 11); //高斯模糊 namedWindow("gaussianblur img", CV_WINDOW_AUTOSIZE); imshow("gaussianblur img", dst2); waitKey(0); return 0; }
中值濾波(模糊):是一種統計排序濾波器,因為在核對應的範圍中,給中心點賦予核範圍內中間數值,對椒鹽噪點有很好點抑制作用。函式:medianBlur(src, dst, 5); //5為卷積核的大小
高斯雙邊濾波(模糊):是邊緣保留的濾波方法,避免邊緣畫素資訊丟失,保留了影象輪廓不變。可以用於美顏中。
bilateralFilter
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace std; using namespace cv; int main(){ Mat src, dst; src = imread("/Users/ming/Documents/test.jpg"); if (!src.data){ printf("cannot load image ..."); return -1; } namedWindow("src img", CV_WINDOW_AUTOSIZE); imshow("src img", src); medianBlur(src, dst, 5); //中值濾波 imshow("medianblur", dst); Mat dst1; GaussianBlur(src, dst1, Size(5,5), 11); //高斯濾波 imshow("gaussianblur", dst1); Mat dst2; bilateralFilter(src, dst2, 15, 150, 10); //高斯雙邊濾波。15表示計算區域的半徑,150表示畫素差值在150內才進行計算 imshow("bilateralFilter", dst2); Mat dst2_1; Mat kernel = (Mat_<int>(3,3) << 0,-1,0,-1,5,-1,0,-1,0); filter2D(dst2, dst2_1, -1, kernel); //提高對比度 imshow("bilateralFilter + filter2D", dst2_1); waitKey(0); return 0; }