main.cpp
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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
#include<iostream> #include<fstream> #include<conio.h> #include<string.h> using namespace std; struct pix { unsigned char b,g,r; }pixel; char Header[54]; ifstream in; ofstream out,out1; int main() { char infile[]=”f:\\bf.bmp”; char outfile[]=”f:\\bf-filtered-laplasian.bmp”; char imdata[]=”f:\\imdata.dat”; int i,j,k,count=0; in.open(infile,ios::in|ios::binary); in.read(( char*)(&Header),sizeof(Header)); int height=*(int*)&Header[18]; int width=*(int*)&Header[22]; int filter[9]={0,-1,0,-1,4,-1,0,-1,0}; // Mask for laplasian // int filter[9]={-1,-1,-1,-1,8,-1,-1,-1,-1}; //Mask for laplasian struct pix a[height][width]; struct pix a1[height][width]; cout << “Height = ” << height <<” Width= ” << width; for(i=0;i<height;i++) for(j=0;j<width;j++) { a[i][j].r=0; a1[i][j].r=0; a[i][j].g=0; a1[i][j].g=0; a[i][j].b=0; a1[i][j].b=0; } out1.open(imdata, ios::out); i=0;j=0; while(!in.eof()) { in.read((char *)(&pixel),sizeof(pixel)); // out1<<“ORIGINAL : ” <<(int)pixel.r<<” , “<<(int)pixel.g<<” , “<<(int)pixel.b<<endl; // cout<<“ORIGINAL : ” <<(int)pixel.r<<” , “<<(int)pixel.g<<” , “<<(int)pixel.b<<endl; if(j==width) { j=0; i++; } a[i][j].r=pixel.r; a[i][j].g=pixel.g; a[i][j].b=pixel.b; // cout<<“PIXEL : “<<(int)a[i][j].r<<” , “<<(int)a[i][j].g<<” , “<<(int)a[i][j].b<<endl; out1<<“PIXEL “<<count++<<” : “<<(int)a[i][j].r<<” , “<<(int)a[i][j].g<<” , “<<(int)a[i][j].b<<endl; j++; } out.open(outfile,ios::out| ios::binary); out.write(( char*)(&Header),sizeof(Header)); count=0; // to write first line of original image to modified image file (border1) for(k=0;k<width;k++) { pixel.r=a[0][k].r; pixel.g=a[0][k].g; pixel.b=a[0][k].b; out1<<“PIXEL WRITTEN “<<count++ << ” : “<<(int)pixel.r<<” , “<<(int)pixel.g<<” , “<<(int)pixel.b<<endl; out.write((char*)(&pixel),sizeof(pixel)); } for(i=1; i<height-1; i++) { for(j=1; j<(width-1); j++) { a1[i][j].r = (int)a[i-1][j-1].r*filter[0]+(int)a[i][j-1].r*filter[1]+(int)a[i+1][j- 1].r*filter[2]+(int)a[i-1][j].r*filter[3]+(int)a[i][j].r*filter[4]+ (int)a[i+1][j].r*filter[5] + (int)a[i- 1][j+1].r*filter[6] + (int)a[i][j+1].r*filter[7] + (int)a[i+1][j+1].r*filter[8]; // a1[i][j].g = (int)a[i-1][j-1].g*filter[0]+(int)a[i][j-1].g*filter[1]+(int)a[i+1][j- 1].g*filter[2]+(int)a[i-1][j].g*filter[3]+(int)a[i][j].g*filter[4]+ (int)a[i+1][j].g*filter[5] + (int)a[i- 1][j+1].g*filter[6] + (int)a[i][j+1].g*filter[7] + (int)a[i+1][j+1].g*filter[8]; // a1[i][j].b = (int)a[i-1][j-1].b*filter[0]+(int)a[i][j-1].b*filter[1]+(int)a[i+1][j- 1].b*filter[2]+(int)a[i-1][j].b*filter[3]+(int)a[i][j].b*filter[4]+ (int)a[i+1][j].b*filter[5] + (int)a[i- 1][j+1].b*filter[6] + (int)a[i][j+1].b*filter[7] + (int)a[i+1][j+1].b*filter[8]; a1[i][j].g =a[i][j].g; a1[i][j].b =a[i][j].b; out1<<“PIXEL MODIFIED ” <<” : “<<(int)a1[i][j].r<<” , “<<(int)a1[i][j].g<<” , “<<(int)a1[i][j].b<<endl; } for(k=0;k<width;k++) { // To write left and write border if(k==0|| k==width-1) { pixel.r=a[i][k].r; pixel.g=a[i][k].g; pixel.b=a[i][k].b; } else //to write middle modified contents { pixel.r=a1[i][k].r; pixel.g=a1[i][k].g; pixel.b=a1[i][k].b; } out1<<“PIXEL WRITTEN “<<count++ << ” : “<<(int)pixel.r<<” , “<<(int)pixel.g<<” , “<<(int)pixel.b<<endl; out.write((char*)(&pixel),sizeof(pixel)); } } // to write bottom border for(k=0;k<width;k++) { pixel.r=a[height-1][k].r; pixel.g=a[height-1][k].g; pixel.b=a[height-1][k].b; out1<<“PIXEL WRITTEN “<<count++ << ” : “<<(int)pixel.r<<” , “<<(int)pixel.g<<” , “<<(int)pixel.b<<endl; out.write((char*)(&pixel),sizeof(pixel)); } in.close(); out.close(); out1.close(); getch();} |