大清早的咱们就来作一个简单有趣的图像处理算法实现,做为对图像处理算法学习的开端吧。之因此有趣就在于笔者把算法处理的各个方式的处理效果拿出来作了对比,给你看到原图和各类处理后的图像你是否可以知道那幅图对应那种算法模式呢?嘻嘻,拭目以待吧算法
平滑的意义:函数
图像平滑image smoothing:压制、弱化或消除图像中的细节、突变、边缘和噪声,就是图像平滑化。学习
图像平滑是对图像做低通滤波,可在空间域或频率域实现。空间域图像平滑方法主要用低通卷积滤波、中值滤波等;频率域图像平滑经常使用的低通滤波器有低通梯形滤波器、低通高斯滤波器、低通指数滤波器、巴特沃思低通滤波器等。ui
自动对工程项目目录下的图片lena.jpg进行平滑处理:采用五种平滑算法,分别显示在五个窗口中方便对比查看效果和各自特色。spa
#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"); }