smooth函数

来源:互联网 发布:网络监控工作总结 编辑:程序博客网 时间:2024/05/22 17:48

smooth函数

 Smooth 函数

各种方法的图像平滑

void cvSmooth( const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0 );
src
输入图像.
dst
输出图像.
smoothtype
平滑方法:
  • CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素领域 param1×param2 求和。如果邻域大小是变化的,可以事先利用函数 cvIntegral 计算积分图像。
  • CV_BLUR (simple blur) - 对每个象素邻域 param1×param2 求和并做尺度变换 1/(param1param2).
  • CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为 param1×param2 的高斯卷积
  • CV_MEDIAN (median blur) - 发现邻域 param1×param1 的中值 (i.e. 邻域是方的).
  • CV_BILATERAL (双滤波) - 应用双向 3x3 滤波,彩色 sigma=param1,空间 sigma=param2. 关于双向滤波,可参考 http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html
param1
平滑操作的第一个参数.
param2
平滑操作的第二个参数. param2 为零对应简单的尺度变换和高斯模糊。
param3
对应高斯参数的 Gaussian sigma (标准差). 如果为零,这由下面的核尺寸计算:
sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核, n=param2 对应垂直核.
对小的卷积核 (3×3 to 7×7) 使用标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小有 sigma 计算 (以保证足够精确的操作).

函数 cvSmooth 可使用上面任何一种方法平滑图像。每一种方法都有自己的特点以及局限。

没有缩放的图像平滑仅支持单通道图像,并且支持8位、16位、32位和32位浮点格式。

简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特 和 32-比特浮点图像。这两种方法可以(in-place)方式处理图像。

中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像


opencv代码:

#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <iostream>#include<cv.h>#include<stdlib.h>using namespace cv;using namespace std;int main(){Mat src, dst;src = imread("D:6.jpg");/*Mat kx = (Mat_<float>(1, 3) << 0,-1,0);Mat ky = (Mat_<float>(1, 3) << -1,0, -1);sepFilter2D(src, dst, src.depth(),kx,ky,Point(-1,-1),0,BORDER_DEFAULT );*/cvSmooth(src, dst, CV_GAUSSIAN, , 3, 0);imshow("shiyan", dst);waitKey(0);return 0;}


0 0
原创粉丝点击