#include "highgui.h"
#include "cv.h"
#include "string.h"
#pragma comment(lib, "cv.lib")
#pragma comment(lib, "cxcore.lib")
#pragma comment(lib, "highgui.lib")
//高斯滤波函数,在opencv里可以使用cvSmooth
void gaussianFilter(uchar* data, int width, int height)
{
int i, j, index, sum,m,n;
uchar *tmpdata ;
int templates[9]={ 1,2,1,
2,4,2,
1,2,1} ;
sum = height * width * sizeof(uchar);//图像所占内存的大小
tmpdata = (uchar*)malloc(sum);
memcpy((char*)tmpdata,(char*)data, sum);//将data中的sum个数复制到tmpdata
for(i = 1;i < height - 1;i++)
{
for(j = 1;j < width - 1;j++)
{
index = sum = 0;
for(m = i - 1;m < i + 2;m++)
{
for(n = j - 1; n < j + 2;n++)
{
sum +=tmpdata[m * width + n]* templates[index++]; //处理
}
data[i * width + j] =sum/16;
}
}
}
free(tmpdata);
}
void imgOperate( IplImage* image )
{
IplImage* pGrayImg=NULL;
cvNamedWindow( "image-in", CV_WINDOW_AUTOSIZE );
cvNamedWindow( "image-out", CV_WINDOW_AUTOSIZE);
cvShowImage( "image-in", image );
/*
IplImage* out = cvCreateImage(
cvGetSize(image),
IPL_DEPTH_8U,
3
);
*/
//将色彩图像强制转化为灰度图像
pGrayImg=cvCreateImage(cvGetSize(image),8,1);
cvCvtColor(image,pGrayImg,CV_RGB2GRAY);
// cvSmooth( image, out, CV_GAUSSIAN, 5,5 );
gaussianFilter((unsigned char*)pGrayImg->imageData,pGrayImg->width,pGrayImg->height);
cvShowImage( "image-out", pGrayImg );
cvReleaseImage( &pGrayImg );
cvWaitKey( 0 );
cvDestroyWindow("image-in" );
cvDestroyWindow("image-out" );
}
int main( int argc, char** argv )
{
IplImage* img = cvLoadImage("1.jpg",1);
imgOperate( img );
cvReleaseImage( &img );
return 0;
}
gaussian滤波 源码
最新推荐文章于 2025-02-02 00:15:00 发布