sobel問題.. 畫面只有呈現一半 |
尚未結案
|
michael081906
一般會員 發表:2 回覆:3 積分:1 註冊:2010-08-10 發送簡訊給我 |
各位前輩好,小弟目前要做影像sobel的處理,跑出來的成果卻是約一半的灰階影像和一半的sobel影像...
而且sobel的區域會有粉紅色的線條,請問各位前輩這是什麼狀況..? 以下是我的程式碼... 謝謝 [code cpp] void __fastcall TForm1::Sobel1Click(TObject *Sender) { Graphics::TBitmap *Bmp, *temp ; TRGBTriple *pptr,*ppptr; BYTE gray; int i, j; Bmp->PixelFormat=pf24bit; Bmp=Image1->Picture->Bitmap; temp = new Graphics::TBitmap(); temp->PixelFormat=pf24bit; temp->Height = Bmp->Height; temp->Width = Bmp->Width; for (j=0; j { pptr = (TRGBTriple *)Bmp->ScanLine[j]; ppptr = (TRGBTriple *)temp->ScanLine[j]; for (i=0; i { gray = (BYTE)( (pptr[i].rgbtRed*0.299) (pptr[i].rgbtGreen*0.587) (pptr[i].rgbtBlue*0.114) ); ppptr[i].rgbtRed = gray; ppptr[i].rgbtGreen = gray; ppptr[i].rgbtBlue = gray; } } Bmp->Assign(temp); Byte *ptr=NULL, *tptr, *uptr, *dptr; int up, down ,left,right,GX,GY,H,W; Graphics::TBitmap *TheBitmap, *TempBitmap,*OrgBitmap; TheBitmap=Image1->Picture->Bitmap; TempBitmap= new Graphics::TBitmap(); TempBitmap->PixelFormat=pf24bit; TempBitmap->Height = Image1->Height; TempBitmap->Width = Image1->Width; TempBitmap->Assign(TheBitmap); OrgBitmap= new Graphics::TBitmap(); OrgBitmap->Height = Image1->Height; OrgBitmap->Width = Image1->Width; OrgBitmap->PixelFormat=pf24bit; for(int y=0;y { up=y-1; down=y 1; if(up<0) up=TheBitmap->Height-1; if(down==TheBitmap->Height) down=0; ptr=(Byte*)TheBitmap->ScanLine[y]; tptr=(Byte*)TempBitmap->ScanLine[y]; uptr=(Byte*)TempBitmap->ScanLine[up]; dptr=(Byte*)TempBitmap->ScanLine[down]; for(int x=0;x { left=x-1; right=x 1; if(left<0) left=TheBitmap->Width-1; if(right==TheBitmap->Width) right=0; GX=(int)(uptr[left] uptr[x]*2 uptr[right]-dptr[left]-dptr[x]*2-dptr[right]); GY=(int)(-uptr[left]-tptr[left]*2-dptr[left] uptr[right] tptr[right]*2 dptr[right]); int ss=sqrt(pow(GX,2) pow(GY,2)); if (ss>255) ss=255; if (ss<0) ss=0; ptr[x]=ss; } } delete TempBitmap; Repaint(); TheBitmap->Assign(TheBitmap); } [/code] 編輯記錄
michael081906 重新編輯於 2010-09-27 20:41:12, 註解 無‧
michael081906 重新編輯於 2010-09-27 20:58:15, 註解 把Bmp的pixelformat往上移到載入圖檔的前面‧ |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
michael081906
一般會員 發表:2 回覆:3 積分:1 註冊:2010-08-10 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
michael081906
一般會員 發表:2 回覆:3 積分:1 註冊:2010-08-10 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
michael081906
一般會員 發表:2 回覆:3 積分:1 註冊:2010-08-10 發送簡訊給我 |
我把它改成載入之前設定...可是結果一樣QQ..
[code cpp] void __fastcall TForm1::Sobel1Click(TObject *Sender) { Graphics::TBitmap *Bmp, *temp ; TRGBTriple *pptr,*ppptr; BYTE gray; int i, j; Bmp = new Graphics::TBitmap(); Bmp->PixelFormat=pf24bit; Bmp=Image1->Picture->Bitmap; temp = new Graphics::TBitmap(); temp->PixelFormat=pf24bit; temp->Height = Bmp->Height; temp->Width = Bmp->Width; for (j=0; j { pptr = (TRGBTriple *)Bmp->ScanLine[j]; ppptr = (TRGBTriple *)temp->ScanLine[j]; for (i=0; i { gray = (BYTE)( (pptr[i].rgbtRed*0.299) (pptr[i].rgbtGreen*0.587) (pptr[i].rgbtBlue*0.114) ); ppptr[i].rgbtRed = gray; ppptr[i].rgbtGreen = gray; ppptr[i].rgbtBlue = gray; } } Bmp->Assign(temp); Byte *ptr=NULL, *tptr, *uptr, *dptr; int up, down ,left,right,GX,GY,H,W; Graphics::TBitmap *TheBitmap, *TempBitmap,*OrgBitmap; TheBitmap= new Graphics::TBitmap(); TheBitmap->PixelFormat=pf24bit; TheBitmap=Image1->Picture->Bitmap; TempBitmap= new Graphics::TBitmap(); TempBitmap->Height = Image1->Height; TempBitmap->Width = Image1->Width; TempBitmap->PixelFormat=pf24bit; TempBitmap->Assign(TheBitmap); OrgBitmap= new Graphics::TBitmap(); OrgBitmap->Height = Image1->Height; OrgBitmap->Width = Image1->Width; OrgBitmap->PixelFormat=pf24bit; for(int y=0;y { up=y-1; down=y 1; if(up<0) up=TheBitmap->Height-1; if(down==TheBitmap->Height) down=0; ptr=(Byte*)TheBitmap->ScanLine[y]; tptr=(Byte*)TempBitmap->ScanLine[y]; uptr=(Byte*)TempBitmap->ScanLine[up]; dptr=(Byte*)TempBitmap->ScanLine[down]; for(int x=0;x { left=x-1; right=x 1; if(left<0) left=TheBitmap->Width-1; if(right==TheBitmap->Width) right=0; GX=(int)(uptr[left] uptr[x]*2 uptr[right]-dptr[left]-dptr[x]*2-dptr[right]); GY=(int)(-uptr[left]-tptr[left]*2-dptr[left] uptr[right] tptr[right]*2 dptr[right]); int ss=sqrt(pow(GX,2) pow(GY,2)); if (ss>255) ss=255; if (ss<0) ss=0; ptr[x]=ss; } } delete TempBitmap; Repaint(); TheBitmap->Assign(TheBitmap); } [/code] ===================引 用 taishyang 文 章=================== 載入內容前設定,跟載入內容後設定結果會不同
編輯記錄
michael081906 重新編輯於 2010-09-27 21:04:46, 註解 貼錯...= = 抱歉‧
michael081906 重新編輯於 2010-09-27 21:05:29, 註解 無‧ michael081906 重新編輯於 2010-09-27 21:06:23, 註解 無‧ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |