OpenCV使用雙邊濾波以及銳化算子實現圖片的美顏以及提升清晰度操作


一、概述

  案例:使用雙邊濾波對圖片進行美化。特性:雙邊濾波能夠很好的保留邊緣的同時抑制平坦區域的噪聲。也就是下圖的人臉看上去更平滑了,而且還不影響頭發手的部分。

  實現步驟:先試用bilateralFilter對圖片進行過濾,然后再利用filter2D的銳化算子提升圖片的整體的清晰度。

二、展示效果

 比較左圖和右圖會發現,左圖人臉上的痔沒有了。整體看上去也更平滑了。下圖相對於右圖來說,清晰度更高了,棱角更分明 。

 

 

三、示例代碼

//中值濾波對椒鹽噪聲有很好的的抑制作用
//原理:卷積核所圈定范圍取中位數
//均值濾波無法克服邊緣像素信息丟失的缺陷。原因是均值濾波是基於平局權重。高斯模糊部分克服了該缺陷,但是無法完全避免,因為沒有考慮像素值的不同。
//高斯雙邊模糊是邊緣保留的濾波方法,避免了邊緣信息丟失,保留了像素輪廓不變。

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char const *argv[])
{
	//加載圖形
	Mat src = imread("girl.jpg");
	if(!src.data){
		cout<< "can't load image ..."<< endl;
		return -1;
	}

	imshow("src",src);

	//中值模糊
	// Mat mediaBlurMat;
	// medianBlur(src,mediaBlurMat,3);
	// imshow("mediaBlurMat",mediaBlurMat);
	
	//高斯雙邊濾波
	Mat bilateralMat;
	/**
	 * 雙邊濾波參數說明:
	 * 15--->計算半徑,半徑之內的都會被納入計算,如果提供-1則根據sigma space參數進行計算
	 * 100--->sigma color 決定多少差值之內的像素會被計算
	 * 5----->sigma space 如果d的值大於0則申明無效,否則根據他來計算d的值
	 **/
	bilateralFilter(src,bilateralMat,15,50,5);
	imshow("bilateralMat",bilateralMat);

	//對雙邊濾波后的圖像執行銳化操作,提升圖片的棱角以及清晰度
	Mat resultImage;
	Mat kernel = (Mat_<int>(3,3)<< 0, -1, 0, -1, 5, -1, 0, -1, 0);
	filter2D(bilateralMat,resultImage,-1,kernel,Point(-1,-1),0);
	imshow("resultImage",resultImage);

	waitKey(0);
	return 0;
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM