線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1914
推到 Plurk!
推到 Facebook!

[影像處理]程式問題??

 
parano
一般會員


發表:14
回覆:6
積分:4
註冊:2007-02-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-28 22:00:33 IP:140.114.xxx.xxx 訂閱
<textarea class="cpp" rows="10" cols="60" name="code"> Image1->Picture->Bitmap->PixelFormat=pf24bit; float gray_level[256]; //宣告要排放gray等級個數的陣列 Graphics::TBitmap *BMP = new Graphics::TBitmap(); Byte *ptr=NULL; //??為何要令為NULL.....第一個問題 BMP->Assign(Image1->Picture->Bitmap); for(int j=0;j<256;j ) gray_level[j]=0; for(int y=0;yHeight;y ) //把值放入gray_level[]內 { ptr = (Byte *)BMP->ScanLine[y]; for(int x=0;xWidth;x ) { int gray=0.3*ptr[x*3] 0.3*ptr[x*3 1] 0.4*ptr[x*3 2]; gray_level[gray]=gray_level[gray] 1; } } for(int i=0;i<256;i ) {gray_level[i]=gray_level[i]/((Image1->Picture->Width)*(Image1->Picture->Height)); //??此段的意思是?...第二個問題 } for(int i=1;i<256;i ) { gray_level[i]=gray_level[i] gray_level[i-1]; //??此段的意思是?...第三個問題 } for(int i=0;i<256;i ) { gray_level[i]=gray_level[i]*255; //??此段的意思是...第四個問題 } for(int y=0;yScanLine[y]; for (int x=0 ; xPicture->Assign(BMP); delete BMP; </textarea> 這是有關直方圖等化的程式~以上程式有四個疑問~煩請各位大大解惑~謝謝!!
parano
一般會員


發表:14
回覆:6
積分:4
註冊:2007-02-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-29 15:57:22 IP:140.114.xxx.xxx 訂閱
<textarea class="cpp" rows="10" cols="60" name="code"> void __fastcall TForm1::Button4Click(TObject *Sender) { Graphics::TBitmap *TheBitmap; Graphics::TBitmap *Bmp = new Graphics::TBitmap(); Byte *ptr,*mptr,*u1ptr,*u2ptr,*d1ptr,*d2ptr; int up1,up2,down1,down2,left1,left2,right1,right2; float Gou; Bmp->PixelFormat=pf24bit; Bmp->Assign(Image1->Picture->Bitmap); for(int y=0;yHeight;y ) { up1=y-1; up2=y-2; down1=y 1; down2=y 2; if(up2<0) up2=Bmp->Height-2; if(down2==Bmp->Height) down2=0; ptr =(Byte *)TheBitmap->ScanLine[y]; mptr =(Byte *)Bmp->ScanLine[y]; u1ptr =(Byte *)Bmp->ScanLine[up1]; u2ptr =(Byte *)Bmp->ScanLine[up2]; d1ptr =(Byte *)Bmp->ScanLine[down1]; d2ptr =(Byte *)Bmp->ScanLine[down2]; for(int x=0;xWidth;x ) { left1=x-1; left2=x-2; right1=x 1; right2=x 2; if(left2<0) left2=Bmp->Width-2; if(right2==Bmp->Width) right2=0; Gou=(u1ptr[left2] 4*u1ptr[left1] 7*u1ptr[x] 4*u1ptr[right1] u1ptr[right2] 4*u2ptr[left2] 16*u2ptr[left1] 26*u2ptr[x] 16*u2ptr[right1] 4*u2ptr[right2] 7*mptr[left2] 26*mptr[left1] 41*mptr[x] 26*mptr[right1] 7*mptr[right2] 4*d1ptr[left2] 16*d1ptr[left1] 26*d1ptr[x] 16*d1ptr[right1] 4*d1ptr[right2] d2ptr[left2] 4*d2ptr[left1] 7*d2ptr[x] 4*d2ptr[right1] d2ptr[right2])/273; ptr[x]=(Byte)Gou; } } Image2->Picture->Assign(Bmp); delete Bmp; } </textarea> 這是我寫的另外的濾波程式,可是有出現錯誤,該如何知道是哪裡出錯呢?? 問題點是出在會出現記憶體超出範圍等字樣~~~~是為何阿~該如何除錯知道錯誤點在哪?? 煩請請各位大大解惑~謝謝!!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-03-29 16:02:26 IP:59.124.xxx.xxx 未訂閱
小建議,可以將程式碼縮排一下,不然看起來很累^^
六尾犬
一般會員


發表:0
回覆:9
積分:11
註冊:2006-09-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-02 10:19:55 IP:218.172.xxx.xxx 訂閱
試問...
如果你的圖大小為320*240
y剛好等於239
down2的值為何?
===================引 用 文 章===================
<textarea class="cpp" rows="10" cols="60" name="code">void __fastcall TForm1::Button4Click(TObject *Sender) { Graphics::TBitmap *TheBitmap; Graphics::TBitmap *Bmp = new Graphics::TBitmap(); Byte *ptr,*mptr,*u1ptr,*u2ptr,*d1ptr,*d2ptr; int up1,up2,down1,down2,left1,left2,right1,right2; float Gou; Bmp->PixelFormat=pf24bit; Bmp->Assign(Image1->Picture->Bitmap); for(int y=0;yHeight;y ) { up1=y-1; up2=y-2; down1=y 1; down2=y 2; if(up2<0) up2=Bmp->Height-2; if(down2==Bmp->Height) down2=0; ptr =(Byte *)TheBitmap->ScanLine[y]; mptr =(Byte *)Bmp->ScanLine[y]; u1ptr =(Byte *)Bmp->ScanLine[up1]; u2ptr =(Byte *)Bmp->ScanLine[up2]; d1ptr =(Byte *)Bmp->ScanLine[down1]; d2ptr =(Byte *)Bmp->ScanLine[down2]; for(int x=0;xWidth;x ) { left1=x-1; left2=x-2; right1=x 1; right2=x 2; if(left2<0) left2=Bmp->Width-2; if(right2==Bmp->Width) right2=0; Gou=(u1ptr[left2] 4*u1ptr[left1] 7*u1ptr[x] 4*u1ptr[right1] u1ptr[right2] ???? 4*u2ptr[left2] 16*u2ptr[left1] 26*u2ptr[x] 16*u2ptr[right1] 4*u2ptr[right2] ???? 7*mptr[left2] 26*mptr[left1] 41*mptr[x] 26*mptr[right1] 7*mptr[right2] ???? 4*d1ptr[left2] 16*d1ptr[left1] 26*d1ptr[x] 16*d1ptr[right1] 4*d1ptr[right2] ???? d2ptr[left2] 4*d2ptr[left1] 7*d2ptr[x] 4*d2ptr[right1] d2ptr[right2])/273; ptr[x]=(Byte)Gou; } } Image2->Picture->Assign(Bmp); delete Bmp; } </textarea> 這是我寫的另外的濾波程式,可是有出現錯誤,該如何知道是哪裡出錯呢?? 問題點是出在會出現記憶體超出範圍等字樣~~~~是為何阿~該如何除錯知道錯誤點在哪?? 煩請請各位大大解惑~謝謝!!
系統時間:2024-05-05 17:10:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!