平滑处理Smooth之图像预处理算法-OpenCV应用学习笔记三

                              logo_thumb9_thumb

 

 

大清早的咱们就来作一个简单有趣的图像处理算法实现,做为对图像处理算法学习的开端吧。之因此有趣就在于笔者把算法处理的各个方式的处理效果拿出来作了对比,给你看到原图和各类处理后的图像你是否可以知道那幅图对应那种算法模式呢?嘻嘻,拭目以待吧算法

平滑的意义:函数

图像平滑image smoothing:压制、弱化或消除图像中的细节、突变、边缘和噪声,就是图像平滑化。学习

图像平滑是对图像做低通滤波,可在空间域频率域实现。空间域图像平滑方法主要用低通卷积滤波、中值滤波等;频率域图像平滑经常使用的低通滤波器有低通梯形滤波器、低通高斯滤波器、低通指数滤波器、巴特沃思低通滤波器等。ui

实现功能:

    自动对工程项目目录下的图片lena.jpg进行平滑处理:采用五种平滑算法,分别显示在五个窗口中方便对比查看效果和各自特色。spa

TKO}7SH$B@G_]}S1)[{Z1P5

函数精析:

  • cvSmooth(const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0, doubleparam4=0)

  • src输入图像,dst输出图像,smoothtype平滑方式,param四个参数
  • smoothtype五种:CV_BLUR_NO_SCALE(0),CV_BLUR(1), CV_GAUSSIAN(2) ,CV_MEDIAN (3) ,CV_BILATERAL(4)
  • CV_BLUR_NO_SCALE(0):无缩放比例的线性卷积,利用参1*参2的结构元进行卷积,仅支持单通道图像
  • CV_BLUR(1):先线性卷积后缩放,缩放比例为1/(参1*参2)
  • CV_GAUSSIAN(2) :利用参1*参2的高斯结构元进行高斯滤波
  • CV_MEDIAN (3):利用参1*参2的方形结构元进行中值滤波
  • CV_BILATERAL(4):利用参1*参2的方形结构元进行双边滤波
  • 最有意思的是该函数如今已经显得无力了,彻底能够被GaussianBlur(), blur(), medianBlur(),obilateralFilter()取代,从图像平滑效果也能够看出。笔者在这里是开篇从基础引入,算是抛本身的砖啦

                                                                                                                                                                                                                                                                           

  • 附源代码:

#include "stdafx.h"
#include"cv.h"
#include"highgui.h"
void main()
{
    IplImage* pImg = cvLoadImage("lena.jpg",1); 

    cvNamedWindow("Example4-in");
    cvNamedWindow("Example4-out-GAUSSIAN");
    cvNamedWindow("Example4-out-CV_BLUR_NO_SCALE");
    cvNamedWindow("Example4-out-CV_BLUR");
    cvNamedWindow("Example4-out-CV_MEDIAN");
    cvNamedWindow("Example4-out-CV_BILATERAL");
    cvShowImage("Example4-in",pImg);

    /*        分配各个图像的结构空间用来存储平滑后的图像         */
    IplImage* out1 = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3);
    IplImage* out2 = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3);
    IplImage* out3 = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3);
    IplImage* out4 = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3);
    IplImage* out5 = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3);

    cvSmooth(pImg,out1,CV_GAUSSIAN,3,3);        //平滑处理
    cvSmooth(pImg,out2,CV_BLUR_NO_SCALE,3,3);
    cvSmooth(pImg,out3,CV_BLUR,3,3);
    cvSmooth(pImg,out4,CV_MEDIAN,3,3);
    cvSmooth(pImg,out5,CV_BILATERAL,3,3);

     
     
    cvShowImage("Example4-out-GAUSSIAN",out1);
    cvShowImage("Example4-out-CV_BLUR_NO_SCALE",out2);
    cvShowImage("Example4-out-CV_BLUR",out3);
    cvShowImage("Example4-out-CV_MEDIAN",out4);
    cvShowImage("Example4-out-CV_BILATERAL",out5);
    cvWaitKey(0);
    cvReleaseImage(&out1);
    cvReleaseImage(&out2);
    cvReleaseImage(&out3);
    cvReleaseImage(&out4);
    cvReleaseImage(&out5);

    cvWaitKey(0);
    cvDestroyWindow("Example4-in");
    cvDestroyWindow("Example4-out-GAUSSIAN");
    cvDestroyWindow("Example4-out-CV_BLUR_NO_SCALE");
    cvDestroyWindow("Example4-out-CV_MEDIAN");
    cvDestroyWindow("Example4-out-CV_BILATERAL");
    cvDestroyWindow("Example4-out-CV_BLUR");
}
相关文章
相关标签/搜索