opencv各类滤波器详解

1.低通滤波器

低通滤波器的效果是降低图像变化的幅度,即对图像进行模糊或平滑,它将一个像素替换为相邻矩形内的像素和,并除以相邻像素的个数(以得到平均值)。

//使用低通滤波器
#include
#include

using namespace cv;
using namespace std;

int main()
{
	Mat src = imread("car.jpg");
	Mat dst;
	Mat dstG;
	cv::blur(src, dst, cv::Size(7, 7));//Size(7,7)表示的相邻像素的范围,数字越大越模糊。
	
	imshow("car", src);
	imshow("car2", dst);

	waitKey(50000);

	return 0;
}

输出结果如下,可看到对原图模糊了。

opencv各类滤波器详解_第1张图片


2.中值滤波器mediaBlur

中值滤波器是非线性的,对一个像素的相邻区域进行操作已确定输出像素的值。该像素及它的相邻区域组成一个数组,同时如名字所示,中值滤波器仅仅计算这组数的中值,并用中值替换当前的像素值。

中值滤波器在去除椒盐噪点方面有显著功效,因为噪点像素不会被选为中值(它或为极大值或为极小值),与之相反均值滤波器会大大受到噪点的影响,因为均值滤波器计算的是平均值,而噪点像素会使相邻像素的平均值发生变化。

同时,中值滤波器还有保留边缘锐利度的优点。然而,它会去除相同区域中的纹理(如背景中的树木)。



//中值滤波器medianBlur
#include
#include
using namespace cv;

int main()
{
	Mat src = imread("salt.jpg");//读取椒盐噪点的图像
	Mat dst;

	cv::medianBlur(src, dst, 5);

	imshow("car2",dst);
	imshow("car", src);
	waitKey(20000);

	return 0;
}
结果如下,很清晰的看到椒盐噪点去除了

opencv各类滤波器详解_第2张图片


3.Sobel滤波




//使用Sobel滤波器
#include
#include

using namespace cv;
using namespace std;

int main()
{
	Mat src = imread("car.jpg");
	Mat sobelX;
	Mat sobelY;
	//对X方向求导,sobelX保留了垂直方向的信息,所以垂直的轮廓看起来更清楚
	cv::Sobel(src,sobelX, CV_8U, 1, 0, 3, 0.4, 128);
	//检测垂直方向的边缘
	cv::Sobel(src, sobelY, CV_8U, 0, 1, 3, 0.4, 128);

	imshow("car", src);
	imshow("sobelX", sobelX);
	imshow("sobelY", sobelY);

	waitKey(50000);

	return 0;
}

结果如下,类似浮雕

opencv各类滤波器详解_第3张图片


下面是水平和垂直合并的结果



//使用Sobel滤波器
#include
#include
#include

using namespace cv;
using namespace std;

int main()
{
	Mat src = imread("car.jpg");
	Mat sobelX;
	Mat sobelY;
	Mat sobel;
	cv::Sobel(src,sobelX, CV_8U, 1, 0, 3, 0.4, 128);
	cv::Sobel(src, sobelY, CV_8U, 0, 1, 3, 0.4, 128);
	//合并结果
	sobel = abs(sobelX) + abs(sobelY);
	//搜索Sobel极大值
	double sobmin, sobmax;
	cv::minMaxLoc(sobel, &sobmin, &sobmax);
	//变换为8位图像
	Mat sobelImage;
	sobel.convertTo(sobelImage, CV_8U, -255. / sobmax, 255);
	//阈值化处理,得到二值图像
	Mat sobelThresholded;
	cv::threshold(sobelImage, sobelThresholded,70, 255, cv::THRESH_BINARY);

	imshow("car", sobelThresholded);
	waitKey(50000);

	return 0;
}
opencv各类滤波器详解_第4张图片好像结果不太理想



你可能感兴趣的:(opencv)