1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
float kernel[edge_w][edge_h]={{-1,-1,-1},{-1,9,-1},{-1,-1,-1}}; //filtre
int round(float a) {
return int(a + 0.5);
}
int main()
{
IplImage* test=0;
CvCapture* capture = 0;
IplImage* gaussian=0;
cvNamedWindow( "Image normal loaded", 1 );
cvNamedWindow( "gaussian loaded", 1 );
IplImage* img = cvLoadImage("boat.jpg",CV_LOAD_IMAGE_GRAYSCALE);
int nl= img->height; // number of lines
int nc= img->width ;//* img->nChannels; // total number of element per line
int step= img->widthStep; // effective width
IplImage* gs = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U ,1);
// get the pointer to the image buffer
unsigned char *data= reinterpret_cast<unsigned char *>(img->imageData);
unsigned char *datags= reinterpret_cast<unsigned char *>(gs->imageData);
cvShowImage( "Image normal loaded", img );
cvWaitKey(2);
Sleep(3000);
int pix,a,b;
for (int i=1; i<nl-1; i++)
{
for (int j=1; j<nc-1; j++ ) // for (int j=0; j<nc-1; j += image->nChannels)
{
float accumulation = 0;
float weightsum = 0;
bool bord = false;
int pos = ((i*nc) +j ) * img->nChannels;
for(int ii=-1;ii<=1;ii++)
{
for(int jj=-1;jj<=1;jj++)
{
int posf = (((i+ii)*nc) + (j+jj) ) * img->nChannels;
float k = data[posf];
accumulation += k * (kernel[1+jj][1+ii]);
weightsum += kernel[1+jj][1+ii];
datags[pos] = round(accumulation/weightsum);
}//end loop i
}//end loop j
}
}
/*
CvMat* kernelmat = cvCreateMat( 3, 3, CV_32FC1);
cvmSet( kernelmat, 0,0, -1 );
cvmSet( kernelmat, 0,1, -1 );
cvmSet( kernelmat, 0,2, -1 );
cvmSet( kernelmat, 1,0, -1 );
cvmSet( kernelmat, 1,1, 9 );
cvmSet( kernelmat, 1,2, -1 );
cvmSet( kernelmat, 2,0, -1 );
cvmSet( kernelmat, 2,1, -1 );
cvmSet( kernelmat, 2,2, -1 );
cvFilter2D( imggray, gsgray, kernelmat);
*/
cvShowImage( "gaussian loaded", gs );
cvWaitKey(2000);
Sleep(20);
cvReleaseImage(&img);
cvReleaseImage(&gs);
return 0;
} |
Partager