#include #include #include #include #include using namespace std; //Simple thresholding int threshold_image(int argcc, char **argvv){ int i,j; //Load image from file IplImage* image = cvLoadImage(argcc == 2 ? argvv[1] : "lena.jpg"); if(!image) { cerr << "Can't load image" << endl; return -1; } //Show size of image CvSize imgSize; imgSize.width = image->width; imgSize.height = image->height; cout << "Size of input image is " << imgSize.width << " x " << imgSize.height << endl; //Create an empty image of one channel (i.e. gray-scale) with 8 bits (unsigned char) per pixel //=> 0-255 range of gray values. IplImage *graylevelimage = cvCreateImage( imgSize, IPL_DEPTH_8U, 1 ); //Convert the input color image into a gray-scale one cvCvtColor(image, graylevelimage,CV_BGR2GRAY);//BW //Create an image (bwimage) that is the exact copy of graylevelimage IplImage *bwimage=cvCloneImage(graylevelimage); //Perform thresholding uchar thresholdval=80; for ( i = 0; i < imgSize.width; i++ ) for ( j = 0; j < imgSize.height; j++ ) if ( ((uchar*)(bwimage->imageData + bwimage->widthStep*j))[i] < thresholdval ) ((uchar*)(bwimage->imageData + bwimage->widthStep*j))[i] = 0; else ((uchar*)(bwimage->imageData + bwimage->widthStep*j))[i] = 255; //Show input/results cvNamedWindow( "input", 1); cvShowImage( "input", image ); cvNamedWindow( "graylevel", 1 ); cvShowImage( "graylevel", graylevelimage ); cvNamedWindow( "bw", 1); cvShowImage( "bw", bwimage); cvWaitKey(); return (0); } //Testing some filters int prog3(int argcc, char **argvv){ IplImage* image = cvLoadImage(argcc == 2 ? argvv[1] : "lena.jpg"); if(!image) return -1; // IplImage *outputimage=cvCloneImage(image); CvSize imgSize; IplImage *bwimage; imgSize.width = image->width; // visualisation image is imgSize.height = image->height; // 640x480 pixels // creation of a 8 bits depth monochrome image bwimage = cvCreateImage( imgSize, 8, 1 ); //Convert the color image into a gray-scale one cvCvtColor(image, bwimage,CV_BGR2GRAY); // BW //Sobel -->>UNCOMMENT FOR RESULT //IplImage *outputimage=cvCloneImage(bwimage); //cvSobel(bwimage, outputimage, 1, 1, 3); //Laplace in sll 3 color channels -->> UNCOMMENT FOR RESULT /*IplImage *outputimage=cvCreateImage( imgSize, IPL_DEPTH_32F, 3); cvLaplace(image, outputimage, 3);*/ //Laplace in grayscale image -->> UNCOMMENT FOR RESULT //IplImage *outputimage=cvCreateImage( imgSize, IPL_DEPTH_32F, 1); //cvLaplace(bwimage, outputimage, 5); //Corner detector -->>UNCOMMENT FOR RESULT //IplImage *outputimage=cvCreateImage(imgSize, IPL_DEPTH_32F, 1); //cvPreCornerDetect( bwimage, outputimage, 7 ); //Convolution with kernel -->>UNCOMMENT FOR RESULT int nrows=5; int ncols=5; int masksize=nrows*ncols; float *a = new float[masksize]; assert(a!=NULL); for (int i=0; i UNCOMMENT FOR RESULT /*IplImage *outputimage=cvCreateImage(imgSize, IPL_DEPTH_8U, 1); cvSmooth( bwimage, outputimage, CV_GAUSSIAN, 5, 5); */ //MEDIAN SMOOTHING --> UNCOMMENT FOR RESULT /*IplImage *outputimage=cvCreateImage(imgSize, IPL_DEPTH_8U, 1); cvSmooth( bwimage, outputimage, CV_MEDIAN, 5, 5); */ // int param1=3, int param2=0, double param3=0, double param4=0 ); printf( "input image depth: %d\n", image->depth); printf( "bw image depth: %d\n", bwimage->depth); printf( "outputimage depth: %d\n", outputimage->depth); cvNamedWindow( "input", 1 ); cvShowImage( "input", image ); cvNamedWindow( "bw", 1 ); cvShowImage( "bw", bwimage ); cvNamedWindow( "output", 1 ); cvShowImage( "output", outputimage ); cvSaveImage("output.png", outputimage); //cvSaveImage("copy.png", outputimage); cvWaitKey(); return (0); } int main( int argc, char** argv ) { return prog3(argc, argv); // return threshold_image(argc, argv); }