精华内容
下载资源
问答
  • opencv中值滤波
    2021-01-22 10:45:51

    进行中值滤波处理的函数为

    medianBlur(src,dst,ksize);
    

    其中各个参数含义如下:

    src表示输入图像,当ksize为3、5的时候输入图可以为浮点型或整形,当ksize大于5的时候,只能为字节型图像
    dst表示中值滤波的输出图像
    ksize表示途中模板的大小,必须为大于1的奇数

    常见的问题会出现在ksize的取值上,如果没有取大于1的技术,就会出现如下错误

    CvException [org.opencv.core.CvException: cv::Exception: OpenCV(3.4.3) /build/3_4_pack-android/opencv/modules/imgproc/src/smooth.cpp:5181: error: (-215:Assertion failed) (ksize % 2 == 1) && (_src0.dims() <= 2 ) in function ‘void cv::medianBlur(cv::InputArray, cv::OutputArray, int)’
    ]

    更多相关内容
  • OpenCV中值滤波源代码

    2016-10-09 20:47:10
    OpenCV中值滤波的源代码,启用SSE2指令,速度非常快。
  • 数字图像处理,用C++语言,自己编写了中值滤波器以及均值滤波器,并和opencv自带函数对比,可直接运行。
  • OpenCV–图像平滑(均值滤波、方框滤波、高斯滤波、中值滤波) 首先看以下图,图像平滑(模糊)只是滤波中的一种操作,并不是整个滤波部分。 一、均值滤波 函数: dst = cv.blur( src, ksize[, dst[, anchor[, ...
  • 这是一个中值滤波函数的简单实用例程,环境为VS2017+OpenCV3.4.3.
  • OpenCV 中值滤波与双边滤波

    千次阅读 2021-11-11 09:19:30
    文章目录线性滤波与非线性滤波非线性滤波中值滤波API medianBlur()双边滤波API bilateralFilter()案例: 线性滤波与非线性滤波 之前一篇文章说的方框滤波、均值滤波和高斯滤波都是线性滤波器的原始数据与滤波结果是...

    线性滤波与非线性滤波

    之前一篇文章说的方框滤波、均值滤波和高斯滤波都是线性滤波器的原始数据与滤波结果是一种线性的算术运算,即用加减乘除等运算实现,所以称之为线性滤波。

    非线性滤波器的原始数据与滤波结果是一种逻辑关系,即通过比较一定邻域内的灰度值大小来实现的。下面介绍的中值滤波和双边滤波就是非线性滤波。

    非线性滤波

    中值滤波

    中值滤波原理通过一张图就可以看明白:

    在这里插入图片描述

    简言之中值滤波就是把函数框(如图中的3 X 3)内的灰度值按顺序排列,然后中值取代函数框中心的灰度值。所以一般采用奇数点的邻域来计算中值,但如果像素点数为偶数,中值就取排序像素中间两点的平均值。

    中值滤波在一定的条件下可以克服常见线性滤波器如方框滤波器、均值滤波等带来的图像细节模糊,而且对滤除脉冲干扰及图像扫描噪声非常有效,也常用于保护边缘信息, 保存边缘的特性使它在不希望出现边缘模糊的场合也很有用,是非常经典的平滑噪声处理方法。

    但是中值滤波的缺点也很明显,因为要进行排序操作,所以处理的时间长,是均值滤波的5倍以上。

    API medianBlur()

    中值滤波在OpenCV中用medianBlur函数实现,下面是函数声明:

    void medianBlur( 
    	InputArray src, 
    	OutputArray dst, 
    	int ksize 
    );
    

    参数:

    • src:就是输入图像
    • dst:输出图像
    • ksize:核的大小

    注意这里的ksize必须为正奇数1,3,5,7……否则程序会出错。

    双边滤波

    双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。具有简单、非迭代、局部的特点。

    双边滤波器的好处是可以做边缘保存(edge preserving),一般用高斯滤波去降噪,会较明显地模糊边缘,对于高频细节的保护效果并不明显。双边滤波器顾名思义比高斯滤波多了一个高斯方差sigma-d,它是基于空间分布的高斯滤波函数,所以在边缘附近,离的较远的像素不会太多影响到边缘上的像素值,这样就保证了边缘附近像素值的保存。但是由于保存了过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤波。

    下图是双边滤波的原理示意图:

    在这里插入图片描述

    在双边滤波器中,输出像素的值依赖于邻域像素值的加权值组合:
    在这里插入图片描述

    而加权系数w(i,j,k,l)取决于空域核和值域核的乘积。
    (i,j),(k,l)分别指两个像素点的坐标。
    其中空域核表示如下(如图):
    在这里插入图片描述
    值域核表示为:
    在这里插入图片描述

    两者相乘后,就会产生依赖于数据的双边滤波权重函数:
    在这里插入图片描述
    d函数是根据像素距离选择权重,距离越近权重越大,这一点和方框滤波,高斯滤波方式相同。而r函数则是根据像素的差异来分配权值。如果两个像素值越接近,即使相距较远,也比差异大而距离近的像素点权重大。正是r函数的作用,使得边缘,即相距近但差异大的像素点的特性得以保留。

    API bilateralFilter()

    OpenCV中用bilateralFilter函数实现双边滤波。

    函数原型:

    void bilateralFilter( 
    	InputArray src, 
    	OutputArray dst, 
    	int d,
    	double sigmaColor, 
    	double sigmaSpace,
    	int borderType = BORDER_DEFAULT 
    );
    

    参数:

    • src:输入图像,即源图像,需要为8位或者浮点型单通道、三通道的图像。
    • dst:即目标图像,需要和源图片有一样的尺寸和类型。
    • d:表示在过滤过程中每个像素邻域的直径。如果这个值我们设其为非正数,那么OpenCV会从第五个参数sigmaSpace来计算出它来。
    • sigmaColor:颜色空间滤波器的sigma值。这个参数的值越大,就表明该像素邻域内有更宽广的颜色会被混合到一起,产生较大的半相等颜色区域。
    • sigmaSpace:坐标标空间中滤波器的sigma值,坐标空间的标注方差。他的数值越大,意味着越远的像素会相互影响,从而使更大的区域足够相似的颜色获取相同的颜色。当d>0,d指定了邻域大小且与sigmaSpace无关。否则,d正比于sigmaSpace。
    • borderType:用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_DEFAULT。

    案例:

    在这里插入图片描述

    #include <iostream>
    #include <math.h>
    #include <opencv2/opencv.hpp>
    #include<opencv2/highgui.hpp>
    #include <opencv2/highgui/highgui_c.h>  
    
    using namespace cv;
    
    int main() {
    
    	Mat img = imread("./test2.jpg");	// 据说丑女经过双边滤波用有美颜效果哦,有兴趣的同学可以试试
    
    	Mat median_img, bilateral_img;
    
    	medianBlur(img, median_img, 10);
    	bilateralFilter(img, bilateral_img, 25, 25 * 2, 25 / 2);
    
    	namedWindow("中值滤波", CV_WINDOW_AUTOSIZE);
    	imshow("中值滤波", median_img);
    
    	namedWindow("双边滤波", CV_WINDOW_AUTOSIZE);
    	imshow("双边滤波", bilateral_img);
    
    	waitKey(0);
    	return 0;
    }
    
    展开全文
  • opencv中值滤波函数

    2015-09-13 19:21:52
    中值滤波是利用3*3矩阵,利用中值取代本像素值的一种滤波算法
  • opencv中值滤波

    2014-08-25 10:58:17
    opencv 中值滤波器的C语言代码实现,实现环境vs2010
  • Qt5.7OpenCV249中值滤波

    2017-01-12 12:38:11
    相关文章请在csdn的博客 It1995 查询
  • 1-中值滤波 中值滤波法是一种非线性平滑技术,将图像的每个像素用邻域 (以当前像素为中心的正方形区域)像素的中值代替 ,常用于消除图像中的椒盐噪声。 与低通滤波不同的是,中值滤波对脉冲噪声有良好的滤除作用,...

    1-中值滤波
    中值滤波法是一种非线性平滑技术,将图像的每个像素用邻域 (以当前像素为中心的正方形区域)像素的中值代替 ,常用于消除图像中的椒盐噪声。
    与低通滤波不同的是,中值滤波对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊,但它会洗去均匀介质区域中的纹理。这些优良特性是线性滤波方法所不具有的。
    中值滤波能减弱或消除傅里叶空间的高频分量,同时也影响低频分量。中值滤波去除噪声的效果依赖于两个要素:邻域的空间范围和中值计算中涉及的像素数。一般说来,小于滤波器面积一半的亮或暗的物体基本上会被滤除,而较大的物体几乎会原封不动地保存下来,因此中值滤波器的空间尺寸必须根据现有的问题来进行调整。

    展开全文
  • OpenCv中值滤波

    千次阅读 2019-09-01 21:43:03
    问题1:什么是中值滤波? 使用像素点邻域附近的像素的中值代替该点的像素值。通俗点来说,在这个像素的左边找五个像素点,右边找五个像素点,将这些像素进行排序,排序过后产生一个中值,啊哈哈,就是中间大小的值...

    问题1:什么是中值滤波?

    使用像素点邻域附近的像素的中值代替该点的像素值。通俗点来说,在这个像素的左边找五个像素点,右边找五个像素点,将这些像素进行排序,排序过后产生一个中值,啊哈哈,就是中间大小的值,来代替该像素的值。

    问题2:中值滤波有什么利弊?

    中值滤波可以有效的去除斑点和椒盐噪声。但是效率低,其运算时间 为均值滤波的五倍以上。

    问题3:相关API的了解

    void medianBlur( InputArray src, OutputArray dst, int ksize );

    参数 InputArray src: 输入得图像  通道可以为1 or 3 or 4通道的图像。

    参数 OutputArray dst: 经过中值滤波的输出图像。

    参数 int ksize: 模板尺寸  此参数必须为大于1的奇数,参数为 3 or 5时图像深度只能为CV_8U、CV_16U、CV_32F中的一个,如而对于较大孔径尺寸的图片,图像深度只能是CV_8U。 

    问题4:上面提到了 CV_8U、CV_16U这些内容,他们到底是啥呢?

    在opencv中Mat这个东西存在各种对象,其中Mat.type()就是其中一个 那么这个东西有什么用呢 ?他是用来测试这个图像的类型参数的,举个例子来说 :

    image = imread("Test.jpg",IMREAD_UNCHANGED);
            cout << image.type() << endl;

    此时控制台输出16  这是啥意思呢  结合下面的一个图片理解即可 ,Mat.type()函数可以返回该Mat的类型。类型表示了矩阵中元素的类型以及矩阵的通道个数,它是一系列的预定义的常量,其命名规则为CV_(位数)+(数据类型)+(通道数)

    那么16就带代表这个图像是一个八位无符号字符型数据  三通道。

    中值滤波代码实现: 起到了滤波的效果 但是还不如OpenCv中自带的滤波器效果好。也没找出来原因 嘿嘿

    #include<opencv.hpp>
    #include<iostream>
    using namespace cv;
    using namespace std;
    void salt(Mat &image, Mat & result, int k)
    {
    	image.copyTo(result);
    	for (; k > 0; k--)
    	{
    		int i = rand() % result.rows;
    		int j = rand() % result.cols;
    		if (result.channels() == 1)
    		{
    			result.at<uchar>(i, j) = 255;
    		}
    		if (result.channels() == 3)
    		{
    			result.at<Vec3b>(i, j)[0] = 255;
    			result.at<Vec3b>(i, j)[1] = 255;
    			result.at<Vec3b>(i, j)[2] = 255;
    		}
    	}
    }
    uchar sort(uchar n1, uchar n2, uchar n3, uchar n4,uchar n5, uchar n6, uchar n7, uchar n8, uchar n9)
    {
    	uchar *ptr = new uchar [9];
    	uchar temp;
    	*ptr = n1;
    	*(ptr + 1) = n2;
    	*(ptr + 2) = n3;
    	*(ptr + 3) = n4;
    	*(ptr + 4) = n5;
    	*(ptr + 5) = n6;
    	*(ptr + 6) = n7;
    	*(ptr + 7) = n8;
    	*(ptr + 8) = n9;
    
    	for(int i = 0; i < 9; i++)
    	{
    		for (int j = 0; j < 9; j++)
    		{
    			if (ptr[i] > ptr[j])
    			{
    				temp = ptr[i];
    				ptr[i] = ptr[j];
    				ptr[j] = temp;
    			}
    		}
    	}
    	
    	temp = ptr[4];
    	delete[] ptr;
    	return temp;
    }
    void middleFilter(Mat& image, Mat & result)
    {
    	image.copyTo(result);
    	for (int i = 0; i < result.rows; i++)
    	{
    		for (int j = 0; j < result.cols; j++)
    		{
    			if ((i > 0) && (i < result.rows - 1) && (j > 0) && (j < result.cols-1))
    			{
    				
    				result.at<Vec3b>(i, j)[0] = sort(result.at<Vec3b>(i - 1, j - 1)[0],result.at<Vec3b>(i - 1, j)[0] ,result.at<Vec3b>(i - 1, j + 1)[0]
    					, result.at<Vec3b>(i, j - 1)[0] , result.at<Vec3b>(i, j)[0] , result.at<Vec3b>(i, j + 1)[0]
    					,result.at<Vec3b>(i + 1, j - 1)[0] , result.at<Vec3b>(i + 1, j)[0] ,result.at<Vec3b>(i + 1, j + 1)[0]);
    
    				result.at<Vec3b>(i, j)[1] = sort(result.at<Vec3b>(i - 1, j - 1)[1], result.at<Vec3b>(i - 1, j)[1], result.at<Vec3b>(i - 1, j + 1)[1]
    					, result.at<Vec3b>(i, j - 1)[1], result.at<Vec3b>(i, j)[1], result.at<Vec3b>(i, j + 1)[1]
    					, result.at<Vec3b>(i + 1, j - 1)[1], result.at<Vec3b>(i + 1, j)[1], result.at<Vec3b>(i + 1, j + 1)[1]);
    
    				result.at<Vec3b>(i, j)[2] = sort(result.at<Vec3b>(i - 1, j - 1)[2], result.at<Vec3b>(i - 1, j)[2], result.at<Vec3b>(i - 1, j + 1)[2]
    					, result.at<Vec3b>(i, j - 1)[2], result.at<Vec3b>(i, j)[2], result.at<Vec3b>(i, j + 1)[2]
    					, result.at<Vec3b>(i + 1, j - 1)[2], result.at<Vec3b>(i + 1, j)[2], result.at<Vec3b>(i + 1, j + 1)[2]);
    			}
    		}
    	}
    }
    int main()
    {
    	Mat image,result1, result2,result3;
    	cout << int(sort(1, 4, 8, 0, 2, 3, 5, 6, 7)) << endl;
    	image = imread("Test.jpg",IMREAD_UNCHANGED);
    	salt(image, result1, 3000);
    	middleFilter(result1, result2);
    	medianBlur(result1,result3,3);
    	imshow("椒盐噪声", result1);
    	imshow("中值滤波", result2);
    	imshow("medianBlur", result3);
    	waitKey(0);
    	return 0;
    }

     

     

     

     

     

     

     

     

    展开全文
  • OpenCV中值滤波

    2018-11-03 12:12:35
    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!&nbsp;&nbsp;&nbsp;... #include &a
  • 如下图,左图带有椒盐噪声,右图为使用中值滤波处理后的图片。 图像滤波的目的有两个:一是抽出对象的特征作为图像识别的特征模式;另一个是为适应图像处理的要求,消除图像数字化时所混入的噪声。 python +opencv...
  • OpenCV 中值滤波

    2021-04-24 15:09:40
    中值滤波是一种典型的非线性滤波技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值。 中值滤波对椒盐噪声(salt-and-pepper noise)来说尤其有用,因为它不依赖于邻域内那些与典型值差别很大的值。 ...
  • OpenCV——中值滤波

    千次阅读 2021-10-03 20:40:13
    图像中值滤波的C++和python代码实现
  • 目录[OpenCV+VS2015]中值滤波、快速中值滤波OpenCV中API中值滤波中值滤波快速中值滤波直方图快速中值滤波过程OpenCV中API总结: 中值滤波 简单来说就是用一个nn的框框(n为奇数)去框一个图像,框选中的nn个像素点...
  • 中值滤波_C#_.Net

    2017-12-20 22:56:12
    中值滤波,基本思路是:将原来516*516的二维数组扩大到516*520的二维数组,多余的元素全部赋值为0,然后进行中值滤波运算。
  • 开发环境为QT5.8+opencv3.2,主要实现了图像增强,包括高斯平滑,中值滤波,图像锐化。
  • 中值滤波代码

    2018-06-14 16:33:07
    此代码是本人写的中值滤波算法,但是图像边界需要读者自己处理。另外,还比较了opencv中值滤波的结果,并进行比对,说明算法过程是正确滴
  • 在图像处理过程中,运用opencv能够较为简单的解决图像裁剪和平滑等操作,资源中分享代码
  • opencv中值滤波和低通滤波器对椒盐噪声处理的效果比较效果:通过比较我们可以看出,中值滤波器有很好的保留了图像的边界信息代码:void showimage(const std::string &str,const cv::Mat &image){...
  • 基于OpenCV的二维图像加噪去噪C++程序,程序包含给图像添加高斯噪声功能,去噪方法有方框滤波、均值滤波、高斯滤波、中值滤波、双边滤波
  • 基于python+openCV中值滤波

    千次阅读 2021-12-11 12:21:30
    基于python+openCV中值滤波
  • opencv-中值滤波(Median filter)

    千次阅读 2021-10-22 21:41:34
    中值滤波(Median filter)是基于排序统计理论的有效抑制噪声的非线性滤波技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值,它不依赖于邻域内那些与典型值差别很大的值。 优点:中值滤波无论是在...
  • opencv-11-中值滤波及自适应中值滤波

    千次阅读 2020-05-03 11:56:29
    开始之前 在上一篇我们实现了读取噪声图像, 然后 进行三种形式的均值滤波得到结果, 由于我们自己写的均值滤波未作边缘处理, 所以效果有一定的下降,...首先介绍了中值滤波的原理, 给出其实现思路,并根据思路实现了 C+...
  • 中值滤波opencv-python

    千次阅读 2022-02-24 11:06:11
    中值滤波-cv.medianBlur()函数 文章目录前言一、中值滤波是什么?二、cv.medianBlur()函数1.函数原型2.与均值滤波的比较参考 前言 线性滤波是滤波模板内的像素值通过线性组合得到,运算过程包含排序、逻辑计算等等...
  • 二、中值滤波 2.1 原理: 2.2 函数原型 void medianBlur( InputArray src, //输入图像 OutputArray dst, //输出图像 int ksize //核 ) 2.3 函数调用 #include <iostream> #include ...
  • 中值滤波与前面介绍的滤波方式不同,不再采用加权求均值的方式计算滤波结果。它用邻域内所有像素值的中间值来替代当前像素点的像素值。 5.1 原理介绍 中值滤波会取当前像素点及其周围临近像素点(一共有奇数个像素...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,695
精华内容 3,078
关键字:

opencv中值滤波

友情链接: sziuential.rar