电视家2.4.3大脚插件什么时候更新软件

页面导航:
→ 正文内容 opencv平滑处理
OpenCV 2.4.3 C++ 平滑处理分析
平滑也称模糊, 是一项简单且使用频率很高的图像处理方法,本文将详细介绍OpenCV 2.4+ C++ 平滑处理,需要了解更多的朋友可以详细参考下
平滑也称模糊, 是一项简单且使用频率很高的图像处理方法。
平滑处理时需要用到一个滤波器。 最常用的滤波器是线性滤波器,线性滤波处理的输出像素值(例如:)是输入像素值(例如:)的加权平均:
称为核, 它仅仅是一个加权系数。
下面是一个使用blur函数的均值平滑: 代码如下:#include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include &stdio.h&
int main( int argc, char** argv ){ M image = imread( argv[1]); if( argc != 2 || !image.data ){ printf("没有图片\n"); return -1; } namedWindow( "平滑处理-输入" ); namedWindow( "平滑处理-输出" ); imshow( "平滑处理-输入", image ); M blur( image, out, Size(3, 3)); imshow( "平滑处理-输出", out ); waitKey( 0 ); }blur函数API资料:
使用归一化块滤波器进行模糊图片操作。C++: void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT ) 参数src C 输入图片,可以使是任意通道数,该函数对通道是独立处理的,但是深度只能是CV_8U, CV_16U, CV_16S, CV_32F or CV_64F。dst C 输出图片,和输入图片相同大小和深度。ksize C 模糊内核大小。anchor C 锚点,默认值是(-1,-1),也就是锚点在内核的中心。borderType C 用于判断图像边界的模式。
该函数对图片进行平滑处理利用了下面的内核:
调用blur(src, dst, ksize, anchor, borderType)相当于调用boxFilter(src, dst, src.type(), anchor, true, borderType)。
blur使用的是归一化块滤波器,输出像素值是核窗口内像素值的均值( 所有像素加权系数相等)。
下面代码使用了GaussianBlur来实现平滑: 代码如下:#include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include &stdio.h&
int main( int argc, char** argv ){ M image = imread( argv[1]); if( argc != 2 || !image.data ){ printf("没有图片\n"); return -1; } namedWindow( "平滑处理-输入" ); namedWindow( "平滑处理-输出" ); imshow( "平滑处理-输入", image ); M GaussianBlur( image, out, Size( 3, 3 ), 0, 0 ); imshow( "平滑处理-输出", out ); waitKey( 0 ); }
GaussianBlur函数API资料:
使用高斯滤波器进行模糊操作C++:&void&GaussianBlur(InputArray&src, OutputArray&dst, Size&ksize, double&sigmaX, double&sigmaY=0, int&borderType=BORDER_DEFAULT) 参数 src&C 输入图片,可以使是任意通道数,该函数对通道是独立处理的,但是深度只能是CV_8U,&CV_16U,&CV_16S,&CV_32F&or&CV_64F.dst&C&输出图片,和输入图片相同大小和深度。ksize&C 高斯内核大小。ksize.width和ksize.height允许不相同但他们必须是正奇数。或者等于0,由参数sigma的乘机决定。sigmaX&C 高斯内核在X方向的标准偏差。sigmaY&C 高斯内核在Y方向的标准偏差。如果sigmaY为0,他将和sigmaX的值相同,如果他们都为0,那么他们由ksize.width和ksize.height计算得出。borderType&C&用于判断图像边界的模式。
最有用的滤波器 (尽管不是最快的)。 高斯滤波是将输入数组的每一个像素点与高斯内核卷积将卷积和当作输出像素值。
参考一维高斯函数,我们可以看见,他是个中间大两边小的函数。
所以高斯滤波器其加权数是中间大,四周小的。
其二维高斯函数为:
其中&&为均值 (峰值对应位置),&代表标准差 (变量&和 变量&各有一个均值,也各有一个标准差)。
使用medianBlur执行中值平滑: 代码如下:#include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include &stdio.h&
int main( int argc, char** argv ){ M image = imread( argv[1]); if( argc != 2 || !image.data ){ printf("没有图片\n"); return -1; } namedWindow( "平滑处理-输入" ); namedWindow( "平滑处理-输出" ); imshow( "平滑处理-输入", image ); M medianBlur( image, out, 3); imshow( "平滑处理-输出", out ); waitKey( 0 ); }
medianBlur函数API资料:
使用中值滤波器进行模糊操作C++:&void&medianBlur(InputArray&src, OutputArray&dst, int&ksize) Parameters:src&C 支持1、3、4通道图片输入,当ksize为3或者5时,图片的深度只能是CV_8U,,CV_16U,或者&CV_32F,对于其他大孔径尺寸只支持深度为CV_8U。dst&C&输出图片,和输入图片相同大小和深度。ksize&C 线性直径大小,只能是一个大于1的奇数,例如:3, 5, 7 ...
中值滤波将图像的每个像素用邻域 (以当前像素为中心的正方形区域)像素的中值代替 。&
使用bilateralFilter执行双边平滑: 代码如下:#include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include &stdio.h&
int main( int argc, char** argv ){ M image = imread( argv[1]); if( argc != 2 || !image.data ){ printf("没有图片\n"); return -1; } namedWindow( "平滑处理-输入" ); namedWindow( "平滑处理-输出" ); imshow( "平滑处理-输入", image ); M bilateralFilter ( image, out, 3, 3*2, 3/2 ); imshow( "平滑处理-输出", out ); waitKey( 0 ); }
bilateralFilter的API资料:
对一个图片应用双边滤波器。C++:&void&bilateralFilter(InputArray&src, OutputArray&dst, int&d, double&sigmaColor, double&sigmaSpace, intborderType=BORDER_DEFAULT&) Parameters:src&C 源必须是8位或者浮点数,1或者3通道图片。dst&C&输出图片,和输入图片相同大小和深度。d&C 在滤波过程中使用的各像素邻域直径,如果这是一个非整数,则这个值由sigmaSpace决定。sigmaColor&C 颜色空间的标准方差。数值越大,意味着越远的的颜色会被混进邻域内,从而使更大的颜色段获得相同的颜色。sigmaSpace&C 坐标空间的标注方差。 数值越大,以为着越远的像素会相互影响,从而使更大的区域足够相似的颜色获取相同的颜色。当d&0,d指定了邻域大小且与sigmaSpace无关。否则,d正比于sigmaSpace。
原理可参考:
http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html
目前我们了解的滤波器都是为了平滑图像, 问题是有些时候这些滤波器不仅仅削弱了噪声, 连带着把边缘也给磨掉了。 为避免这样的情形 (至少在一定程度上 ), 我们可以使用双边滤波。&
类似于高斯滤波器,双边滤波器也给每一个邻域像素分配一个加权系数。 这些加权系数包含两个部分, 第一部分加权方式与高斯滤波一样,第二部分的权重则取决于该邻域像素与当前像素的灰度差值。
上一篇:下一篇:
最 近 更 新
热 点 排 行只需一步,快速开始
后使用快捷导航没有帐号?
TV应用下载 / 资源分享区
综合交流 / 产品评测 / 活动公告
新手入门 / 社区互助 / 闲聊茶馆
随时随地,快速访问
只要手机在手,您都可以快速、方便地看贴发帖,与论坛好友收发短消息。
极致优化,畅快"悦"读
独有的论坛界面和触屏设计,手机论坛也变得赏心悦目,操作自如。
即拍即发,分享生活
不管是风景图画,还是新闻现场,拍照发帖一气呵成,让您在论坛出尽风头。
下载客户端后,拍摄二维码快速访问本站:
或者通过以下地址访问:
Powered by Discuz! X3

我要回帖

更多关于 魔兽世界2.4.3插件 的文章

 

随机推荐