通过对opencv中cvFilter2D函数对图像做卷积运算实现二维图像滤波。本节主要介绍相关知识。
函数cvFilter2D对图像做卷积运算。
格式
/* Convolves the image with the kernel */ CVAPI(void) cvFilter2D( const CvArr* src, CvArr* dst, const CvMat* kernel, CvPoint anchor CV_DEFAULT(cvPoint(-1,-1)));参数
说明
函数cvFilter2D对图像进行线性滤波,支持替换方式操作。当核运算部分超出输入图像时,边界外面的像素值等于离它最近的图像像素值。
IplImage * ImagePixel::ImageFiltering(IplImage* pImg ){ if(!pImg){ printf("ERROR: Load File in ImageFiltering(..).\n"); exit(0); } IplImage *src = cvCreateImage(cvGetSize(pImg),pImg->depth,1); if(pImg->nChannels ==1) src = cvCloneImage(pImg); if(pImg->nChannels ==3) cvCvtColor(pImg,src,CV_BGR2GRAY); float k[9] = { 1.f/16, 2.f/16, 1.f/16, 2.f/16, 4.f/16, 2.f/16, 1.f/16, 2.f/16, 1.f/16}; // 这里高斯核滤波器归一化 CvMat Km = cvMat( 3, 3, CV_32F, k ); IplImage* dst = cvCloneImage( src ); cvFilter2D( src, dst, &Km, cvPoint(-1,-1)); return dst; }
(a) 原始图像 (b)二维图像的滤波效果
关于Image Engineering & Computer Vision的更多讨论与交流,敬请关注本博和新浪微博songzi_tea.