OpenCV学习笔记——滤波器实践

18人阅读 评论(0) 收藏 举报
分类:
#include<iostream>
#include<opencv2\imgproc\imgproc.hpp>
#include<opencv2\highgui\highgui.hpp>

using namespace cv;

#define WINDOW_NAME "【图像平滑与图像增强实验_OpenCV】"



//-------------------------------------【全局函数声明】------------------------------------------
//	描述:全局函数声明
//-------------------------------------------------------------------------------------------
void on_Trackerbar_BoxFilter(int kSize, void *);
void on_Trackerbar_Blur(int kSize, void *);
void on_Trackerbar_GaussianBlur(int kSize, void *);
void on_Trackerbar_MedianBlur(int kSize, void *);
void on_Trackerbar_BilateralFilter(int kSize, void *);
//-------------------------------------【全局变量】------------------------------------------
//	描述:全局变量声明
//-------------------------------------------------------------------------------------------
RNG g_rng(12345);
cv::Mat srcImage;
cv::Mat srcGray;
cv::Mat dstImage;

//-------------------------------------【main()函数】----------------------------------------
//	描述:控制台应用程序的入口函数
//-------------------------------------------------------------------------------------------
int main(int argc, char **argv)
{
	//加载图像
	srcImage = imread("G:\\VS_File\\Picture\\lena.jpg");
	if (srcImage.empty())
	{
		std::cout << "Image 1 is None!";
		cv::waitKey(0);
		return -1;
	}
	cv::imshow(WINDOW_NAME, srcImage);
	//转换为灰度图像
	cv::cvtColor(srcImage, srcGray, CV_BGR2GRAY);
	//cv::imshow("SrcGray", srcGray);
	/************************************************************************************************************************/
	//盒滤波器
	int box_size = 1;
	int box_size_max = 10;
	createTrackbar("Box滤波", WINDOW_NAME, &box_size, box_size_max, on_Trackerbar_BoxFilter);
	on_Trackerbar_BoxFilter(box_size,0);
	//均值滤波器(实际即盒滤波器)
	int blur_size = 1;
	int blur_size_max = 10;
	createTrackbar("Blur滤波", WINDOW_NAME, &blur_size, blur_size_max, on_Trackerbar_Blur);
	on_Trackerbar_Blur(blur_size, 0);
	//高斯滤波器
	int GaussianBlur_size = 1;
	int GaussianBlur_size_max = 10;
	createTrackbar("GaussianBlur滤波", WINDOW_NAME, &GaussianBlur_size, GaussianBlur_size_max, on_Trackerbar_GaussianBlur);
	on_Trackerbar_GaussianBlur(GaussianBlur_size, 0);
	/************************************************************************************************************************/
	//非线性滤波器
	//中值滤波器
	int MedianBlur_size = 1;
	int MedianBlur_size_max = 10;
	createTrackbar("MedianBlur滤波", WINDOW_NAME, &MedianBlur_size, MedianBlur_size_max, on_Trackerbar_MedianBlur);
	on_Trackerbar_MedianBlur(MedianBlur_size, 0);

	//双边滤波器
	int BilateralFilter_size = 10;
	int BilateralFilter_size_max = 100;
	createTrackbar("Bilateral滤波", WINDOW_NAME, &BilateralFilter_size, BilateralFilter_size_max, on_Trackerbar_BilateralFilter);
	on_Trackerbar_BilateralFilter(BilateralFilter_size, 0);
	/************************************************************************************************************************/

	cv::waitKey(0);
	cv::destroyAllWindows();
	return 0;
}


//------------------------------【On_Trackbar()回调函数】-----------------------------------
//	描述:响应滑动条的回调函数
//-------------------------------------------------------------------------------------------
//滤波器的回调函数(其实就是调用了盒滤波器)
void on_Trackerbar_Blur(int kSize, void *)
{
	cv::Size size(kSize * 2 + 1, kSize * 2 + 1);
	cv::Point point(-1, -1);
	blur(srcGray, dstImage, size, point, 4);
	cv::imshow("BlurImage", dstImage);
	std::cout << "Blur 滤波窗口大小为 " << (kSize * 2 + 1) << " 的滤波结果如图所示" << std::endl;
}
//盒滤波器的回调函数
void on_Trackerbar_BoxFilter(int kSize, void *)
{
	cv::Size size(kSize*2+1, kSize * 2 +1);
	cv::Point point(-1, -1);
	boxFilter(srcGray, dstImage, srcGray.depth(), size, point, true, 4);
	cv::imshow("BoxFiltImage", dstImage);
	std::cout << "BoxFilter滤波窗口大小为 " << (kSize * 2 + 1) << " 的滤波结果如图所示" << std::endl;
}
//高斯滤波器的回调函数
void on_Trackerbar_GaussianBlur(int kSize, void *)
{
	cv::Size size(kSize * 2 + 1, kSize * 2 + 1);

	GaussianBlur(srcGray, dstImage, size, 0, 0, 4);
	cv::imshow("GaussianBlurImage", dstImage);
	std::cout << "GaussianBlur滤波窗口大小为 " << (kSize * 2 + 1) << "的滤波结果如图所示" << std::endl;
}
//中值滤波器的回调函数
void on_Trackerbar_MedianBlur(int kSize, void *)
{
	int size = kSize * 2 + 1;
	medianBlur(srcGray, dstImage, size);
	cv::imshow("MedianBlurImage", dstImage);
	std::cout << "GaussianBlur滤波窗口大小为 " << size << "的滤波结果如图所示" << std::endl;
}
//双边滤波器的回调函数
void on_Trackerbar_BilateralFilter(int kSize, void *)
{
	bilateralFilter(srcGray, dstImage, kSize, kSize *2, kSize /2);
	cv::imshow("BilateralFilterImage", dstImage);
	std::cout << "BilateralFilter滤波窗口大小为 " << kSize << "的滤波结果如图所示" << std::endl;
}



查看评论

简单邮件传输协议SMTP封装类

简单邮件传输协议SMTP封装类作者:Asif Rasheed 翻译:刘建强 在Internet上,Email是最流行的传输媒体。这篇文章包括两个协议:. POP 3 协议: POP3协议(邮政传输协议...
  • ghj1976
  • ghj1976
  • 2001-08-22 18:15:00
  • 1438

Opencv提供的四种滤波器

以下内容的解释来自于《Computer Vision: Algorithms and Applications》(机器视觉:算法和应用)的作者Richard Szeliski以及《LearningOp...
  • Keyboard365
  • Keyboard365
  • 2015-12-02 15:48:48
  • 512

OpenCV 各种滤波器的简单使用

一. 实验描述对OpenCV的滤波器进行简单的使用,其中包括:方框滤波、均值滤波、高斯滤波、中值滤波、双边滤波、膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽和黑帽。二. 实验代码class Task1...
  • whai362
  • whai362
  • 2016-08-30 19:41:40
  • 1091

Opencv学习笔记(一)滤波器原理及其使用

滤波器是根据原有图像的某个像素的周围像素来确定新的像素值,滤波器主要的作用是用来消去噪声的,消除图像中的不合理的像素点。滤波器主要包括线性滤波器和非线性滤波器,其中线性滤波器包括均值滤波,方框滤波和高...
  • dzs1993
  • dzs1993
  • 2016-01-05 18:36:59
  • 1969

opencv各类滤波器详解

1.低通滤波器 低通滤波器的效果是降低图像变化的幅度,即对图像进行模糊或平滑,它将一个像素替换为相邻矩形内的像素和,并除以相邻像素的个数(以得到平均值)。 //使用低通滤波器 #include #i...
  • xuhang0910
  • xuhang0910
  • 2015-07-27 17:38:18
  • 1123

OpenCV学习笔记-拉普拉斯变换

拉普拉斯变换的函数为:Laplace计算图像的 Laplacian 变换void cvLaplace( const CvArr* src, CvArr* dst, int aperture_size=...
  • superdont
  • superdont
  • 2011-08-05 17:18:59
  • 8556

Gabor滤波小结的OpenCV实现

转载请注明:http://www.cppblog.com/polly-yang/ 一.房屋检测小结        一开始,直接用LSD(Line Segment Detector)检测VH...
  • yu_fujiang
  • yu_fujiang
  • 2017-01-19 10:32:40
  • 816

Gabor滤波简介与Opencv中的实现及参数变化实验

Gabor滤波是一种非常常见的特征提取算法,在人脸识别等领域有着很广泛的应用,在这里我主要介绍一下Gabor滤波器的公式及Opencv下的代码实现,以及我做的一些参数变化的实验。一、Gabor滤波简介...
  • lhanchao
  • lhanchao
  • 2017-02-12 22:17:59
  • 3099

OpenCV实现Gabor滤波(2)

对上一版的Gabor滤波代码进行了修改: 1) jiang
  • lichengyu
  • lichengyu
  • 2014-04-26 15:24:16
  • 7633

opencv的scharr滤波器

 int main(){  Mat src = imread("test.jpg");//载入原始图     Mat src1, src2, src3, src4,dst;  namedW...
  • cqltbe131421
  • cqltbe131421
  • 2017-03-08 11:16:26
  • 281
    个人资料
    等级:
    访问量: 604
    积分: 116
    排名: 118万+
    文章存档