#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <math.h>
int main( int argc, char** argv )
{
int height ,width ,step ,channels ;
int i,j,k,same ,max,min,thresh,sum;
uchar*data0,*data1 ;
//char *filename="result.bmp";
// IplImage* Img,*nimg; //声明IplImage指针
//载入图像
IplImage* nimg = cvLoadImage("1.jpg");
IplImage* Img = cvCreateImage(cvGetSize(nimg),8,1);
cvCvtColor( nimg, Img, CV_BGR2GRAY );
height = Img->height;
width = Img->width;
step = Img->widthStep/sizeof(uchar);
channels = Img->nChannels;
data0 = (uchar*)Img->imageData;
data1 = (uchar*)nimg->imageData;
printf("Processing a %d X %d image with %d channels\n",width,height,channels);
int OffSetX[37] = { -1, 0, 1,
-2,-1, 0, 1, 2,
-3,-2,-1, 0, 1, 2, 3,
-3,-2,-1, 0, 1, 2, 3,
-3,-2,-1, 0, 1, 2, 3,
-2,-1, 0, 1, 2,
-1, 0, 1 };
int OffSetY[37] = { -3,-3,-3,
-2,-2,-2,-2,-2,
-1,-1,-1,-1,-1,-1,-1,
0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2,
3, 3, 3 };
max = min = data0[0];
//for(i=0;i<height;i++)
// for(j=0;j<width;j++)
//{
// if(data0[i*step+j]>max) max = data0[i*step+j];
//if(data0[i*step+j]<min) min = data0[i*step+j];
// }
for(i=3;i<height-3;i++)
for(j=3;j<width-3;j++)
{
same =0;sum = 0;
for(k=0;k<37;k++)
{
sum+=data0[(i+OffSetY[k])*step+(j+OffSetX[k])];
thresh = sum/37;
if(fabs( (float)(data0[(i+OffSetY[k])*step+(j+OffSetX[k])]-data0[i*step+j]))<=thresh)
same++;
if(same<18)
data1[i*step+j] = 255;
else
data1[i*step+j] = 0;
}
}
cvNamedWindow( "Image", 1 ); //创建窗口
cvShowImage( "Image", nimg ); //显示图像
cvWaitKey(0); //等待按键
cvDestroyWindow( "Image" );//销毁窗口
cvReleaseImage( &Img ); //释放图像
cvReleaseImage( &nimg );
return 0;
}