OpenCV 图像处理——平滑操作

关键函数:

    

关键函数:

Smooth

各种方法的图像平滑

void cvSmooth( const CvArr* src, CvArr* dst,
               int smoothtype=CV_GAUSSIAN,
               int param1=3, int param2=0, double param3=0, double param4=0 );
src
输入图像.
dst
输出图像.
smoothtype
平滑方法:
  • CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素的 param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数 cvIntegral 计算积分图像。
  • CV_BLUR (simple blur) - 对每个象素param1×param2邻域 求和并做尺度变换 1/(param1•param2).
  • 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的值 为零,则表示其被设定为param1。

         如下是代码:

         

#include "cv.h"
#include "highgui.h"
#include  "cxcore.h"

int param1=1;
int param2=1;
IplImage *img,*dst;

void switch_callback(int position)
{
   int  m_param1=param1*2+1;
   int  m_param2=param2*2+1;
   cvSmooth(img,dst,CV_GAUSSIAN,param1,param2);
 
   cvShowImage("Smooth Demo",dst);
   
}
int main(int argc,char* argv[])
{
   IplImage *image=cvLoadImage(argv[1]);
   img=image;
   cvNamedWindow("Smooth Demo",1);
   cvCreateTrackbar("Param1","Smooth Demo",¶m1,99,switch_callback);
   cvCreateTrackbar("Param2","Smooth Demo",¶m2,99,switch_callback);
   dst=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
     
   while(1)
   {
      if(cvWaitKey(15)==27)
        break;
   }  
  cvReleaseImage(&img);
  cvReleaseImage(&dst);
  cvReleaseImage(&image);
  cvDestroyWindow("Smooth Demo"); 
}
效果如下:

  OpenCV 图像处理——平滑操作_第1张图片

OpenCV 图像处理——平滑操作_第2张图片
    

你可能感兴趣的:(image,callback,DST,图像处理)