OpenCV图像处理篇之图像平滑(2)

if (I.channels()) {
            I.at<uchar>(j,i) = 255;
        } else {
            I.at<Vec3b>(j,i)[0] = 255;
            I.at<Vec3b>(j,i)[1] = 255;
            I.at<Vec3b>(j,i)[2] = 255;
        }
    }
}

上面程序的逻辑非常清晰:

1.读入灰度图,并添加椒盐噪声(6000个噪声点):
Mat I = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE);
salt(I, 6000);

OpenCV图像处理篇之图像平滑


2.disp_caption和disp_image函数分别是用于显示提示文字和平滑过程中的变化图像的,平滑过程中图像的变化如下图:

OpenCV图像处理篇之图像平滑

注意观察上面的图,中值滤波(Median Blur)对椒盐噪声的效果最好!


3.四种滤波方法分别使用到4个OpenCV函数,这些函数的声明都在imgproc.hpp中,这些函数的前2个参数都是原图像和滤波后图像。

归一化滤波器blur的第3个参数为滤波核窗口的大小,Size(i,i)表示ixi大小的窗口。

高斯滤波器GaussianBlur第3个参数也是滤波核窗口的大小,第4、第5个参数分辨表示x方向和y方向的δ。

中值滤波器medianBlur第3个参数是滤波器的长度,该滤波器的窗口为正方形。

双边滤波器的函数原型如下:
//! smooths the image using bilateral filter
CV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d,
                            double sigmaColor, double sigmaSpace,
                            int borderType=BORDER_DEFAULT );


4.本程序使用的Makefile文件为:
 TARG=image_smoothing
 SRC=image_smoothing.cpp
 LIB=-L/usr/local/lib/
 INC=-I/usr/local/include/opencv/ -I/usr/local/include/opencv2
 CFLAGS=

$(TARG):$(SRC)
    g++ -g -o $@ ${CFLAGS} $(LIB) $(INC) \
        -lopencv_core -lopencv_highgui -lopencv_imgproc \
        $^

.PHONY:clean

clean:
    -rm $(TARG) tags -f

--------------------------------------分割线 --------------------------------------

Ubuntu Linux下安装OpenCV2.4.1所需包

Ubuntu 12.04 安装 OpenCV2.4.2

CentOS下OpenCV无法读取视频文件

Ubuntu 12.04下安装OpenCV 2.4.5总结

Ubuntu 10.04中安装OpenCv2.1九步曲

基于QT和OpenCV的人脸识别系统

--------------------------------------分割线 --------------------------------------

OpenCV的详细介绍请点这里
OpenCV的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/d1d37e7694842526c080d0247f2026a1.html