OpenCV之5种滤波方法
来源:互联网 发布:讲文明 知礼仪儿童画 编辑:程序博客网 时间:2024/05/16 03:12
5种滤波方法分别为:
3种线性滤波:方框滤波、均值滤波、高斯滤波
2种非线性滤波:中值滤波、双边滤波
简单来说,方框滤波就是邻域内取个平均值,均值滤波就是方框滤波再归一化一下,高斯滤波就是用正态分布去和图像做卷积。
中值滤波是用像素点邻域灰度值的中值来代替这个像素点的灰度值,而双边滤波像素点的灰度值是邻域像素值的加权组合,是一个基于空间分布的高斯滤波函数,可以很好的保留边缘附近的像素值。
从书上抄的代码:
#include <opencv2/opencv.hpp>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <cstdio>using namespace cv;Mat g_srcImage,g_dstImage1,g_dstImage2,g_dstImage3,g_dstImage4,g_dstImage5;int g_nBoxFilterValue=6;int g_nMeanBlurValue=10;int g_nGaussianBlurValue=6;int g_nMedianBlurValue=10;int g_nBilateralFilterValue=10;static void on_BoxFilter(int,void *);static void on_MeanBlur(int,void *);static void on_GaussianBlur(int,void *);static void on_MedianBlur(int,void *);static void on_BilateralFilter(int,void *);int main(){ //====================载入原图==================== g_srcImage=imread("/Users/hxh/Desktop/2.jpg",0); if (!g_srcImage.data){ printf("no source image!\n"); return false; } //==============复制原图到5个Mat类型中============== g_dstImage1=g_srcImage.clone(); g_dstImage2=g_srcImage.clone(); g_dstImage3=g_srcImage.clone(); g_dstImage4=g_srcImage.clone(); g_dstImage5=g_srcImage.clone(); //===================显示原图===================== namedWindow("0:source image",WINDOW_AUTOSIZE); imshow("0:source image",g_srcImage); //================【<1>方框滤波】================== namedWindow("1:image after box filter",WINDOW_AUTOSIZE); createTrackbar("内核值:", "1:image after box filter", &g_nBoxFilterValue, 50,on_BoxFilter); on_MeanBlur(g_nBoxFilterValue, 0); //================【<2>均值滤波】================== namedWindow("2:image after mean blur",WINDOW_AUTOSIZE); createTrackbar("内核值:", "2:image after mean blur", &g_nMeanBlurValue, 50,on_MeanBlur); on_MeanBlur(g_nMeanBlurValue,0); //================【<3>高斯滤波】================== namedWindow("3:image after gaussian blur",WINDOW_AUTOSIZE); createTrackbar("内核值:", "3:image after gaussian blur", &g_nGaussianBlurValue, 50,on_GaussianBlur); on_GaussianBlur(g_nGaussianBlurValue,0); //================【<4>中值滤波】================== namedWindow("4:image after median filter",WINDOW_AUTOSIZE); createTrackbar("参数值:", "4:image after median filter", &g_nMedianBlurValue, 50,on_MedianBlur); on_MedianBlur(g_nMedianBlurValue,0); //================【<5>双边滤波】================== namedWindow("5:image after bilateral filter",WINDOW_AUTOSIZE); createTrackbar("参数值:","5:image after bilateral filter",&g_nBilateralFilterValue,50,on_BilateralFilter); on_BilateralFilter(g_nBilateralFilterValue, 0); //==================输入'q'结束=================== while (char(waitKey(1))!='q'){} return 0;}//==============【on_BoxFilter()函数】================static void on_BoxFilter(int,void *){ boxFilter(g_srcImage, g_dstImage1, -1, Size(g_nBoxFilterValue+1,g_nBoxFilterValue+1)); imshow("1:image after box filter",g_dstImage1);}//==============【on_MeanBlur()函数】=================static void on_MeanBlur(int,void *){ blur(g_srcImage,g_dstImage2,Size(g_nMeanBlurValue+1,g_nMeanBlurValue+1),Point(-1,-1)); imshow("2:image after mean blur",g_dstImage2);}//============【on_GaussianBlur()函数】===============static void on_GaussianBlur(int,void *){ GaussianBlur(g_srcImage, g_dstImage3, Size(g_nGaussianBlurValue*2+1,g_nGaussianBlurValue*2+1), 0, 0); imshow("3:image after gaussian blur",g_dstImage3);}//==============【on_MedianBlur()函数】===============static void on_MedianBlur(int,void *){ medianBlur(g_srcImage, g_dstImage4, g_nMedianBlurValue*2+1); imshow("4:image after median filter",g_dstImage4);}//============【on_BilateralFilter()函数】============static void on_BilateralFilter(int,void *){ bilateralFilter(g_srcImage, g_dstImage5, g_nBilateralFilterValue, g_nBilateralFilterValue*2, g_nBilateralFilterValue/2); imshow("5:image after bilateral filter",g_dstImage5);}
阅读全文
0 0
- OpenCV之5种滤波方法
- opencv之 图像滤波
- opencv基础之滤波
- OpenCV之九 非线性滤波专场:中值滤波、双边滤波
- 读OpenCV之小侃高斯滤波
- opencv之卡尔曼滤波
- 读OpenCV之小侃高斯滤波
- OpenCV之图像滤波简述
- opencv学习之图像滤波
- Opencv学习之线性滤波
- Opencv学习之非线性滤波
- OpenCV学习之卷积滤波
- 【拜小白opencv】32-平滑处理5非线性滤波之——双边滤波
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- 【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- extern类型的函数
- WEB版一次选择多个文件进行批量上传(WebUploader)的解决方案
- 计算机二级C操作题题型
- python爬虫学习第三十七天
- JavaScript学习笔记——基础语法
- OpenCV之5种滤波方法
- POJ 1458 Common Subsequence DP
- BZOJ3295: [Cqoi2011]动态逆序对(CDQ分治)
- Python的面试题
- 仿海报工厂效果的自定义View
- MapReduce 二次排序
- centos6下安装与配置squid代理
- LightOJ 1052 String Growth(数学递推+矩阵快速幂求斐波拉契数列)
- java算法全排列Demo