本章内容

1. 均值滤波

2.高斯滤波

3.中值滤波

4. 双边滤波

5.自定义滤波核滤波

1.均值滤波

opencv 常用图像滤波

输出结果:

opencv 常用图像滤波

2.高斯滤波

opencv 常用图像滤波

输出结果:

opencv 常用图像滤波

3.中值滤波

opencv 常用图像滤波

输出结果

opencv 常用图像滤波

4. 双边滤波

opencv 常用图像滤波

输出结果

opencv 常用图像滤波

5.自定义滤波

opencv 常用图像滤波

输出结果

opencv 常用图像滤波

源码


#include <ostream>
#include <opencv.hpp>

int main(int argc, char *argv[])
{
    /*
     本章内容:
        1. 均值滤波
        2.高斯滤波
        3.中值滤波
        4.双边滤波
        5.自定义滤波核滤波
    */
    cv::String fileName = "/home/wang/dev/Image/cdut.jpeg";
    cv::Mat src = cv::imread(fileName);
    if(src.data == NULL){
        printf("图像读入失败\n");
        return -1;
    }
    /* 1. 均值滤波
         api接口: CV_EXPORTS_W void blur( InputArray src, OutputArray dst,
                        Size ksize, Point anchor = Point(-1,-1),
                        int borderType = BORDER_DEFAULT );

    */
    cv::Mat dst;
    cv::blur(src,dst,cv::Size(5,5));
    cv::imshow("cdut", src);
    cv::imshow("cdut blur", dst);
    /*2.高斯滤波
        api接口: CV_EXPORTS_W void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
                                double sigmaX, double sigmaY = 0,
                                int borderType = BORDER_DEFAULT );
        参数: sigmaX,sigmaY,为高斯核的标准差,默认sigmaY与sigmaX相同。
    */
    cv::Mat dstGaussian;
    cv::GaussianBlur(src, dstGaussian, cv::Size(7,7),5.0);
    cv::imshow("cdut Gaussian", dstGaussian);

    /*3.中值滤波
        api接口:
            CV_EXPORTS_W void medianBlur( InputArray src, OutputArray dst, int ksize );
        */
    cv::Mat dstMedian;
    cv::medianBlur(src, dstMedian, 5 );
    cv::imshow("cdut median", dstMedian);

    /*4.双边滤波
        api接口: CV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d,
                                   double sigmaColor, double sigmaSpace,
                                   int borderType = BORDER_DEFAULT );
        参数分析:
            @param d Diameter of each pixel neighborhood that is used during filtering. // 核空间范围
            @param sigmaColor Filter sigma in the color space. // 颜色空间标准差
            @param sigmaSpace Filter sigma in the coordinate space.  // 空域标准差
    */
    cv::Mat dstBilateral;
    cv::bilateralFilter(src, dstBilateral, 5,7,7);
    cv::imshow("cdut dstBilateral", dstBilateral);

    /* 5.自定义滤波
        api接口: CV_EXPORTS_W void filter2D( InputArray src, OutputArray dst, int ddepth,
                            InputArray kernel, Point anchor = Point(-1,-1),
                            double delta = 0, int borderType = BORDER_DEFAULT );
        参数分析:
        @param ddepth Destination image depth, see @ref filter_depths "combinations"

        */
    cv::Mat dstMe;

    cv::Mat kernel=(cv::Mat_<float>(3,3) << 1.0,2.0,1.0,2.0,4.0,2.0,1.0,2.0,1.0);
    /* 求和运算接口
     CV_EXPORTS_AS(sumElems) Scalar sum(InputArray src);
    */
    cv::Scalar sumValue = cv::sum(kernel);
    std::cout << "sum = %f\n" << sumValue << std::endl;
    /* 除法运算接口
     CV_EXPORTS_W void divide(double scale, InputArray src2,
    OutputArray dst, int dtype = -1);
    */
    std::cout << "kenerl befor divide\n" << kernel <<std::endl;
    cv::divide(1/sumValue[0], kernel, kernel);
    std::cout << "kernel after divide\n" << kernel << std::endl;
    cv::filter2D(src, dstMe, -1,kernel);
    printf("src.type=%d, dstMe.type=%d\n",src.type(),dstMe.type());
    cv::imshow("cdut myKernel", dstMe);

    cv::waitKey(0);
    return 1;
}

 

 

 

 

 

 

相关文章: