【OpenCV】 图像的几种滤波方式

       一般我们在边缘检测中,因为需要对图像的质量要求较高,所以一般需要对图像进行滤波处理,常见的滤波处理有:均值平滑滤波、高斯滤波、中值滤波、双变滤波等。下面是实现代码:

#include < iostream>
#include 
#include 
 
using namespace std;
 
int main()
{
    string imName = "lena.jpg";
    cv::Mat im = cv::imread(imName);
    cv::imshow("原图",im);
    cv::Mat imGs = im.clone();
    int kSize = 21;
    cv::Mat outim;
    cv::blur(imGs, outim, cv::Size(kSize, kSize), cv::Point(-1,-1));//均值平滑滤波
    cv::imshow("blur", outim);
    cv::GaussianBlur(imGs, outim, cv::Size(kSize, kSize), 0, 0); //高斯滤波
    cv::imshow("gsblur", outim);
    cv::medianBlur(imGs, outim, kSize); //中值滤波
    cv::imshow("median", outim);
    cv::bilateralFilter(imGs, outim, kSize, kSize  2, kSize/2); //双变滤波
    cv::imshow("bilateral", outim);
    cout << imGs.type() << endl;
    IplImage inData = cvCreateImage(imGs.size(), 8, imGs.channels());
    IplImage outData = cvCreateImage(imGs.size(), 8, imGs.channels());
    inData = IplImage(imGs);
    cvSmooth(inData, outData, 4, 0);//双边滤波平滑
    cv::Mat o = cv::cvarrToMat(outData);
    cv::imshow("smooth", o);
    cv::waitKey(0);
    return 0;
}

图片就不放了,大家可以找一些图片对比一下,看看效果。

你可能感兴趣的:(OpenCv,图像处理)