array-problem

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

array-problem

siva_ratana
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <iostream.h>


int array_calc (int arr[], int size)
{
    int sum = 0;

    if ( size < 0 )
    { return 0; }
    else
    {
        return arr[size - 1] + array_calc(arr, size - 1);
    }

    //for (int i = 0; i < size; i++)
    //{ sum = sum + arr[i]; }
}




int main (int argc, char *argv[]){

//IplImage* pic=0;
IplImage* pic2=0;

pic2= cvLoadImage(argv[1],0);
int height;
int width;
int pixels;
 int x,y;
 int channel;
 int value;
 double test;
 test = 26;
 int z,h;
z=0;
h=0;

// CvHistogram* cvCreateHist();
// int b;
 //cvThreshold(pic2,pic2,test,1,CV_THRESH_BINARY);
//CvScalar c;

height = pic2->height;
width = pic2->width;
channel= pic2->nChannels;
//a= pic->nChannels;

 pixels=width*height;
// printf("%d,%d\n",height,width);
 //printf("Number of Pixels:%d",pixels);

//a=pic->*imageData(pic);

 //a == pic[10,20];
 //c=cvGetAt(pic,230,331);

//printf("%d",c);
 //printf("%d,%d,%d",c.val[0],c.val[1],c.val[2]);
 //cvRectangle(pic,cvPoint(20,20),cvPoint(750,750),CV_RGB(0,255,0));

 //IplImage* image, int channel, int value
z=pic2->width;
h=pic2->height;
int test2[500][500];
int test3[256];

for(int q=0;q<256;q++)
test3[q]=0;

 for (x=0;x<500;x++){
         for (y=0;y<500;y++){
 
value = (((uchar*)(pic2->imageData + pic2->widthStep*(y)))[(x *
pic2->nChannels) + channel]) ;

test2[x][y]=value;



//printf("The pixel value for coordinate (%d,%d) is %d\n" ,x,y,value);
         }
 }

int pixelVal=0;
        for(int a=0;a<width;a++){
                for(int b=0;b<height;b++){
                        pixelVal=test2[a][b];
                        //printf("%d",pixelVal);
                        test3[pixelVal]=test3[pixelVal]+1;
                        //printf("%d",test3[pixelVal]);


                }
               
                       
        }


int max=test3[0];
int maxIndex=0;
        for(int r=0;r<256;r++){
                if(test3[r]>max){
                        maxIndex=r;
                        max=test3[r];
                       
                }
               
        }
       

 
//for(int v=0;v<256;v++)
//printf("Number of pixels having %d value is %d pixels\n", v,test3[v]);

//printf("Most frequent value is %d with %d pixels",maxIndex,max);

int cdf[256];

for (int d=0;d<256;d++){
       
        cdf[d]= array_calc(test3,d);

}


//for(int e=0;e<256;e++){
       
// printf("%d\n",cdf[e]);
       
//}


int min=cdf[0];

        for(int m=0;m<256;m++){
                if(cdf[m]<min){
                        //maxIndex=r;
                        min=cdf[m];
                       
                }
               
        }
int IntVal;
        for (x=0;x<500;x++){
                for(y=0;y<500;y++){

                        IntVal= ((cdf[test2[x][y]]-min)/((250000)-min))*255;
                                test2[x][y]=IntVal;
                }
        }

//printf("%d\n",min);

//for (int k=0;k>5;k++){/
// printf("%d",test3[k]);

//}
       
                        printf("%d",test2[200][100]);


cvNamedWindow("Testing",1);

cvShowImage("Testing",pic2);

cvWaitKey(0);



return 0;

}


this is my program..it will get the pixel value by the coordinate and
save it in a array. if i increase the multidimensional array size more
than 500, it will generate a runtime error..i need help..