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

RegionGrow程式碼問題

尚未結案
frankh
一般會員


發表:25
回覆:36
積分:12
註冊:2005-05-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-14 21:46:08 IP:220.134.xxx.xxx 未訂閱
我的程式是做把照片二值化後...然後再頭髮上點一點作Region_Grow..把頭髮的部分選取出...但是程式做出來的結果跟我要的不同...可不可以請各位大大幫我看一下.... 這是我程式做出的結果: 但我需要的結果: 我的程式碼:
void Region_Grow(int x,int y)
{
     col[x][y]=128;
     if (col[x-1][y]==0 && x>=1)
        Region_Grow(x-1,y);         if (col[x+1][y]==0 && x=1)
        Region_Grow(x,y-1);         if (col[x][y+1]==0 && yText="GOGO";    int x,y,z,cnt;    for (z=0; z<20; z++)
{    for (j=0; j<320; j++)
   for (i=0; i<240; i++)
     dummy[i][j]=col[i][j];     for (j=2; j<320-2; j++)
  for (i=2; i<240-2; i++)
  {
     if (dummy[i][j]==128)
     {
        cnt=0;
        for (y=-2; y<=2; y++)
          for (x=-2; x<=2; x++)
            if (dummy[i+x][j+y]==255)
              cnt++;
        if (cnt>=1)
          col[i][j]=255;
      }
   }    for (j=0; j<320; j++)
   for (i=0; i<240; i++)
     dummy[i][j]=col[i][j];    for (j=2; j<320-2; j++)
  for (i=2; i<240-2; i++)
  {
     if (dummy[i][j]==255)
     {
        cnt=0;
        for (y=-2; y<=2; y++)
          for (x=-2; x<=2; x++)
            if (dummy[i+x][j+y]==128)
              cnt++;
        if (cnt>=1)
          col[i][j]=128;
      }
   }
}        fp1=fopen("D:\\eyebrow100\\1.bmp","rb");
fp2=fopen("D:\\eyebrow100\\2.bmp","wb");
for (i=0; i<1078; i++)
{
  j=getc(fp1);
  putc(j,fp2);
}
for (j=0; j<320; j++)
  for (i=0; i<240; i++)        putc(col[i][j],fp2);    fclose(fp1);
fclose(fp2);
}
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-15 21:46:39 IP:221.169.xxx.xxx 未訂閱
fp=fopen("d:\\eyebrow100\\3.bmp","rb");
    for (i=0; i<54; i  )
         j=getc(fp);
    for (j=0; j<320; j  )
       for (i=0; i<240; i  )
       {
         col[i][j]=getc(fp);
       col[i][j 1]=getc(fp);
       col[i][j 2]=getc(fp);
       }
你確定你的圖是RGB的? 又你填資料進col陣列的時候也怪怪的,有些點會重複填到 像是j=0, i=0時,會填入col[0][0], col[0][1], col[0][2] j=1, i=0時,會填入col[0][1], col[0][2], col[0][3] 當j=319, i=239時,會填入col[239][319], col[239][320], col[239][321] 明顯已經超過影像的範圍,會寫到非法的記憶體區域去 另外你貼出來的兩張圖,看不出有任何關連... 最後
fp1=fopen("D:\\eyebrow100\\1.bmp","rb");
fp2=fopen("D:\\eyebrow100\\2.bmp","wb");
for (i=0; i<1078; i  )
{
  j=getc(fp1);
  putc(j,fp2);
}
為何要寫入1.bmp的1078 bytes的資料到2.bmp去? bmp的檔頭只有54bytes而已吧
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-15 21:49:36 IP:59.115.xxx.xxx 未訂閱
frankh 您好:    我收到您的簡訊了,但是我不知道您測試的圖檔內容為何?您貼上來的程式碼中也有一些變數的宣告未貼上來,所以無法推敲出問題的所在。    您如果方便的話,就將使用到的圖檔以及完整的程式碼補齊貼上來,如果程式較大的話,也可以考慮將程式 (包含用到的圖檔) 打包上傳到 "會員求助程式檔案上傳區",這樣子或許比較容易找出問題。 7 天天敲鍵盤 v 時時按滑鼠 8
frankh
一般會員


發表:25
回覆:36
積分:12
註冊:2005-05-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-16 17:13:05 IP:220.134.xxx.xxx 未訂閱
RedSnow您好: 這是我的程式碼..裡面有含照片了... http://delphi.ktop.com.tw/topic.php?TOPIC_ID=81465 我的程式在D槽要建立一個barbara的資料夾做暫存檔的存放... 那個執行的結果我的說法可能有誤: 我現在寫的程式應該要執行的結果是 但跑出來的結果卻是 麻煩請您指導一下
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-16 18:55:02 IP:59.115.xxx.xxx 未訂閱
frankh 您好:    兩件事情知會您: 1. 您上傳的檔案內沒看到有 1.bmp 與 3.bmp 這兩個檔案。 2. 請將您的操作步驟詳細的描述一下。 7 天天敲鍵盤 v 時時按滑鼠 8
frankh
一般會員


發表:25
回覆:36
積分:12
註冊:2005-05-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-16 20:07:43 IP:220.134.xxx.xxx 未訂閱
RedSnows您好: 開啟一張彩色圖片...用手動二值化後會把彩色圖片顯示出在手動二值化結果裡面...此時在D槽的barbara的資料夾裡面就會出現3.bmp這個已經二值化後的彩照....然後請使用者再手動二值化結果裡的那張二值化圖片中點選頭髮的部份做Region_Grow...此時系統就會開啟1.bmp這張暫存檔做Region_Grow的動作...把結果存成2.bmp....程式是可以正常run的..但是跑不出2.bmp的結果
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-11-16 23:37:14 IP:61.230.xxx.xxx 未訂閱
frankh 您好:    我瞭解了 3.bmp 是由程式產生的,但是 1.bmp 這個檔案是由何處產生的?內容是什麼?    請告知您測試的相關數值,例如:二值化的設定值為多少....,這樣子我比較好模擬出您的測試結果,以便做實際的比對。      7 天天敲鍵盤 v 時時按滑鼠 8
frankh
一般會員


發表:25
回覆:36
積分:12
註冊:2005-05-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-11-17 17:59:40 IP:220.134.xxx.xxx 未訂閱
RedSnow您好: 抱歉...一直沒描述清楚.. 正規劃之後的圖要先存成1.bmp... 二值化的設定值大概是95.. 然後選取二值化後那張圖片的頭髮..做Region_Grow..出來2.bmp
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-11-18 00:23:06 IP:61.230.xxx.xxx 未訂閱
frankh 您好:    您貼上來的那個圖檔 (需要的結果) 與您上傳供測試的圖檔並不相同,這樣子很難做實際的比對,必要時,請您使用人工的方式,將測試前、中、後應該產生的圖像效果製作出來貼上來,把您實際想處理的結果做個較為切確的說明。    您的程式中沒看到有產生 1.bmp 的敘述,但是卻有讀取 1.bmp 的敘述,那個 1.bmp 是怎麼產生的?內容為何?    我這邊測試您上傳程式的結果,390x531x24 的原圖可以產生二值化之後的 240x320x24 圖檔,但這個部分是透過 Image 元件來完成的,其它使用 col 陣列處理的部份,根本就無法產生正確的圖檔 (無法使用任何看圖程式來查看內容)。    我目前產生的疑問和 justdo 的問題是相同的,請您抽空把 justdo 提出來的問題說明一下吧。      7 天天敲鍵盤 v 時時按滑鼠 8
frankh
一般會員


發表:25
回覆:36
積分:12
註冊:2005-05-04

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-11-18 12:17:02 IP:220.134.xxx.xxx 未訂閱
RedSnow您好: 抱歉..我貼上來得圖檔是當時測試的... 我所po的問題已經解決了.. 1.bmp本來是要有一張正規化的圖... 現在程式已經修改成匯入一張圖後經過正規化會自動儲存一張1.bmp的檔案.. 而程式的檔頭問題已經改過了... 對不起..麻煩大家了...謝謝大家的指導
引言: frankh 您好: 您貼上來的那個圖檔 (需要的結果) 與您上傳供測試的圖檔並不相同,這樣子很難做實際的比對,必要時,請您使用人工的方式,將測試前、中、後應該產生的圖像效果製作出來貼上來,把您實際想處理的結果做個較為切確的說明。 您的程式中沒看到有產生 1.bmp 的敘述,但是卻有讀取 1.bmp 的敘述,那個 1.bmp 是怎麼產生的?內容為何? 我這邊測試您上傳程式的結果,390x531x24 的原圖可以產生二值化之後的 240x320x24 圖檔,但這個部分是透過 Image 元件來完成的,其它使用 col 陣列處理的部份,根本就無法產生正確的圖檔 (無法使用任何看圖程式來查看內容)。 我目前產生的疑問和 justdo 的問題是相同的,請您抽空把 justdo 提出來的問題說明一下吧。 7 天天敲鍵盤 v 時時按滑鼠 8
系統時間:2024-05-10 21:09:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!