使用cvSmooth()函数以五种方式平滑图像

来源:互联网 发布:体体育训练软件 编辑:程序博客网 时间:2024/06/05 15:37

简单模糊、简单无缩放模糊、中值滤波、高斯模糊、双边滤波

#include <iostream>#include <opencv2/opencv.hpp>#include <opencv2/highgui.hpp>#include <opencv2/core/core.hpp>#include <stdio.h>#include <cstdlib>using namespace std;using namespace cv;int main(int argc, const char * argv[]) {    /*使用cvSmooth多种方法平滑处理图像*/    const char filename[] = "/Users/linwang/Desktop/Lena.png";    IplImage * image = cvLoadImage(filename);        cvNamedWindow("Original",0);    cvNamedWindow("Blur",0);    cvNamedWindow("Blur-No-Scale",0);    cvNamedWindow("Median",0);    cvNamedWindow("Gussian",0);    cvNamedWindow("BIL",0);        cvShowImage("Original", image);        /*1.简单模糊:*/    IplImage * blur = cvCreateImage(cvSize(image->width, image->height), image->depth, image->nChannels);    cvSetZero(blur);    cvSmooth(image, blur,CV_BLUR,5,5);    cvShowImage("Blur", blur);    /*2.简单无缩放模糊*/    /*注意:使用CV_BLUR_NO_SCALE平滑类型,输入图像和输出图像必须有不同的数据精度*/    IplImage * Blur_NoScale = cvCreateImage(cvSize(image->width, image->height), IPL_DEPTH_16S, image->nChannels);    Blur_NoScale->origin = image->origin;    cvSetZero(Blur_NoScale);    cvSmooth(image, Blur_NoScale,CV_BLUR_NO_SCALE,5,5);    cvShowImage("Blur-No-Scale", Blur_NoScale);        /*3.中值滤波*/    IplImage * Median = cvCloneImage(image);    cvSetZero(Median);    cvSmooth(image, Median,CV_MEDIAN,5,5);    cvShowImage("Median", Median);        /*4.高斯模糊*/    IplImage * Gussian = cvCloneImage(image);    cvSetZero(Gussian);    cvSmooth(image, Gussian,CV_GAUSSIAN,5,5,3,3);    cvShowImage("Gussian", Gussian);        /*5.中值滤波*/    /*特别注意:CV_BILATERAL平滑类型的输入和输出图像必须是8u,也就是灰度图*/    //因该平滑类型不支持in place方式,故多次平滑时注意增加临时图像    IplImage * BIL = cvCloneImage(image);    IplImage * Temp_BIL = cvCloneImage(image);    cvSetZero(BIL);    cvSetZero(Temp_BIL);    cvSmooth(image, Temp_BIL,CV_BILATERAL,3,3,11,11);    int count = 0;    while (count<100)    {        cvSmooth(Temp_BIL, BIL,CV_BILATERAL,7,7,11,11);        cvCopy(BIL, Temp_BIL);        count++;    }    cvShowImage("BIL", BIL);        cvWaitKey(0);        cvReleaseImage(&image);    cvReleaseImage(&blur);    cvReleaseImage(&Blur_NoScale);    cvReleaseImage(&Median);    cvReleaseImage(&Gussian);    cvReleaseImage(&BIL);}

原创粉丝点击