全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1234
推到 Plurk!
推到 Facebook!

爲何ptr=(Byte*)Bmp->ScanLine[i]要使用2次

尚未結案
lixdon
一般會員


發表:13
回覆:10
積分:4
註冊:2004-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-10 17:09:39 IP:61.155.xxx.xxx 未訂閱
有問題請教版大,我在研讀版大的ImageProcess範例程式,對於Button6(邊緣偵測)中有點不明白,爲何ptr=(Byte*)Bmp->ScanLine[i];要使用2次呢?  
 
Byte *ptr;
 Bmp->Assign(Image1->Picture->Bitmap );
 //turn to gray
 for (int i=0;iHeight;i   )
 {
  ptr=(Byte*)Bmp->ScanLine[i];
  for (int j=0;jWidth; j   )
  {
   p1[j][i]=ptr[j*3];
  }
 }
 for (int i=0;iHeight;i   )
 {
  ptr=(Byte*)Bmp->ScanLine[i];//第2次使用<--
  for (int j=0;jWidth; j   )
   {
    if ((Gx(j,i) Gy(j,i))>255)
  //以下略.....
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-10 18:17:38 IP:219.68.xxx.xxx 未訂閱
Byte *ptr;
 Bmp->Assign(Image1->Picture->Bitmap );
 //turn to gray
 for (int i=0;iHeight;i   )
 {
  ptr=(Byte*)Bmp->ScanLine[i];
  for (int j=0;jWidth; j   )
  {
   p1[j][i]=ptr[j*3];
  }
 }    這邊有一個p1..上面這個步驟只是把圖先存到P1而已     for (int i=0;iHeight;i   )
 {
  ptr=(Byte*)Bmp->ScanLine[i];//第2次使用<--
  for (int j=0;jWidth; j   )
   {
    if ((Gx(j,i) Gy(j,i))>255)
  //以下略.....    
很多影像處理都必須讀很多次圖..分別存到不同的地方 再把他們拿來做處理的... 像邊緣偵測就一定得弄一個矩陣來當暫存.. 在空間域的乘加運算中..假如前一個點作完了..就不能影響後面的點 所以必須拿原圖做乘加運算處理..把結果放到新的矩陣的那一點.. 再做下一點..最後..那張暫存的圖才是您處理後的圖.. 如果是SOBEL運算..還要做2次..所以用很多次SCANLINE是很正常的 供參考
jim006
一般會員


發表:22
回覆:25
積分:9
註冊:2004-01-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-10 18:44:28 IP:218.162.xxx.xxx 未訂閱
我的看法因該是....首先 第一次的Scanline對整張影像是要把整個像數值讀在一個矩陣列中,第二次用Scanline是因為要拿第一次所得到的每點的像數值,用來做判斷用或者一些點數上的加減乘除的運算....希望這是你想要的答案.....tks
lixdon
一般會員


發表:13
回覆:10
積分:4
註冊:2004-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-12 08:17:24 IP:61.155.xxx.xxx 未訂閱
將ptr宣告成: Byte *ptr[460]; 我試過了,scanline只要一次就好
系統時間:2024-05-12 12:03:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!