ScanLine掃瞄影像做sobel邊緣化 |
答題得分者是:senso
|
超級賽亞人3
一般會員 發表:38 回覆:53 積分:23 註冊:2007-06-05 發送簡訊給我 |
我用ScanLine掃瞄動態影像
畫面都很LAG 而且現在還出錯 錯誤的圖檔 我該怎麼修改呢? [code cpp] void __fastcall TForm1::Timer4Timer(TObject *Sender) { Byte *ptr;//用來指像素行的指標 int r,g,b;//rgb三原色 int grey;//用來存灰階化後的值 float count[256]={0}; //各色階計數 Graphics::TBitmap *Bmps = new Graphics::TBitmap(); //定義一個圖象句柄// Bmps->Assign(Form1->Image1->Picture->Bitmap); // 將Image1 的Bitmap轉存到TBitmap Bmp for(int d = 0; d < Bmps->Height; d) { ptr = (Byte *) Bmps->ScanLine[d]; //該行像素位址給ptr for(int c = 0; c < Bmps->Width; c) { b=ptr[c*3]; //該點第一個位子是藍色 g=ptr[c*3 1]; //該點第二個位子是綠色 r=ptr[c*3 2]; //該點第三個位子是紅色 grey=0.299*r 0.587*g 0.114*b; //計算灰階後的值 ptr[c*3]=(Byte)grey; //存回灰階後的值 ptr[c*3 1]=(Byte)grey; ptr[c*3 2]=(Byte)grey; count[grey]; //灰階化後的各色階的計數 } } /**********************************Sobel測邊方法***********************************/ int i,j; int **Sx; int **Sy; int TempImg[320][240]; Byte *ptr1; Byte *ptr2; Byte *ptr3; Image4->Width = Bmps->Width; Image4->Height= Bmps->Height; for(i=1;i < Bmps->Width-1 ;i ) { for(j=1;j < Bmps->Height-1 ;j ) { ptr1 = (Byte *) Bmps->ScanLine[i-1]; ptr2 = (Byte *) Bmps->ScanLine[i]; ptr3 = (Byte *) Bmps->ScanLine[i 1]; /******計算X方向及Y方向的灰階變化量*******/ /* Sx = Bmps->Canvas->Pixels[i-1][j 1] Bmps->Canvas->Pixels[i][j 1]*2 Bmps->Canvas->Pixels[i 1][j 1] - Bmps->Canvas->Pixels[i-1][j-1] - Bmps->Canvas->Pixels[i][j-1]*2 - Bmps->Canvas->Pixels[i 1][j-1]; Sy = Bmps->Canvas->Pixels[i 1][j-1] Bmps->Canvas->Pixels[i 1][j]*2 Bmps->Canvas->Pixels[i 1][j 1] - Bmps->Canvas->Pixels[i-1][j-1] - Bmps->Canvas->Pixels[i-1][j]*2 - Bmps->Canvas->Pixels[i-1][j 1]; */ Sx[j][i]=-1*ptr1[(j-1)*3]-2*ptr1[j*3]-1*ptr1[(j 1)*3] ptr3[(j-1)*3] 2*ptr3[j*3] ptr3[(j 1)*3]; Sy[j][i]=-1*ptr1[(j-1)*3] ptr1[(j 1)*3]-2*ptr2[(j-1)*3] 2*ptr2[(j 1)*3]-1*ptr3[(j-1)*3] ptr3[(j 1)*3]; /*************在計算合成的量****************/ TempImg[j][i] = abs(sqrt(sqrt(sqrt(pow(Sx[j][i],2) pow(Sy[j][i],2))))); if(TempImg[j][i]<40) /*門檻值設置*/ Image4->Canvas->Pixels[j][i] = (TColor)RGB(255,255,255); /*將影像設為白點*/ else Image4->Canvas->Pixels[j][i] = (TColor)RGB(0,0,0); /*將影像設為黑點*/ } } Repaint(); } [/code] |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
crowneva
一般會員 發表:4 回覆:10 積分:2 註冊:2009-07-27 發送簡訊給我 |
|
超級賽亞人3
一般會員 發表:38 回覆:53 積分:23 註冊:2007-06-05 發送簡訊給我 |
|
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
|
超級賽亞人3
一般會員 發表:38 回覆:53 積分:23 註冊:2007-06-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |