2012-11-19 64 views
0

你好,我有一個運行時錯誤,我不知道可能是錯誤的數字輸入的東西?我以爲我會問一些幫助雙曲線最終概率密度函數Opencv

也許東西超出範圍t[x]=gmin*pow(gmax/gmin, factor); ?? ??

void image::hhyper(const char* path) 
{ 
    IplImage* img = cvLoadImage(path); 
    IplImage* out = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3); 

    h = img->height; 
    w = img->width; 
    step = img->widthStep; 
    channels = img->nChannels; 
    data = (uchar *)img->imageData; 
    newdata = (uchar *)out->imageData; 

    int gmin=20; 
    int gmax=200; 

    double sum=0; 
    double t[256]; 
    double factor; 

    for(int a=0; a<h; a++){ 
     for(int b=0; b<w; b++){ 
      for(int k=0; k<3; k++){ 
       newdata[i*step+j*channels+k]=data[i*step+j*channels+k]; 
      } 
     } 
    } 

    for(int x=0; x<256; x++){ 
     sum+=table[x]; 
     factor=sum/(h*w); 
     t[x]=gmin*pow(gmax/gmin, factor); 
    } 

    for(int a=0; a<h; a++){ 
     for(int b=0; b<w; b++){ 
      for(int k=0; k<3; k++){ 
       newdata[i*step+j*channels+k]=t[(int)data[i*step+j*channels+k]]; 
     } 
     } 
    } 

    cvNamedWindow("out"); 
    cvNamedWindow("in"); 
    cvShowImage("in",img); 
    cvShowImage("out",out); 
    system("pause"); 
} 

,這裏是我的頭

class image 
{ 
public: 
image(); 
const char* path; 
void hhyper(const char*); 
void histo(const char*); 
IplImage* DrawHistogram(CvHistogram *hist, float scaleX, float scaleY); 
int h,w,step,channels,i,j,; 
int table[256]; 
uchar *data, *newdata; 
+0

什麼是你得到的錯誤? –

+0

運行時錯誤:/ – RedFox

+0

natve陣列太大?任何想法傢伙? – RedFox

回答

0

也許這

newdata[i*step+j*channels+k] = t[(int)data[i*step+j*channels+k]]; 

應該

newdata[i*step+j*channels+k] = t[(uchar)data[i*step+j*channels+k]]; 
+0

嗯沒有不會改變結果:/ – RedFox

+0

確定找到解決方案我只需要更改一些符號...感謝您的幫助,雖然 – RedFox