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

二值化後的怪現象

答題得分者是:JerryKuo
chatman
一般會員


發表:7
回覆:2
積分:1
註冊:2004-10-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-02 13:23:10 IP:220.139.xxx.xxx 未訂閱
左上圖是我參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=32450 的放大程式碼所得到的圖。而右上圖是我寫的二值化程式後所跑出來的結果 再左上圖是我參考 http://delphi.ktop.com.tw/topic.php?topic_id=34732 的內插法放大所得到的圖。而右上圖是我寫的二值化程式後所跑出來的結果。 奇怪的是兩者都有右半邊跑不出的怪現象 就算跑出來也不是純二值化....有綠色、黃色等的雜訊 底下是我的二值化程式: ------------------------------------------------------
    
    Graphics::TBitmap *Bmp = new Graphics::TBitmap();
    Byte *ptr;
    int r,g,b;
    int gray;
    int i,j;
    int threshold;
    threshold=ScrlBarThreshold->Position;  //這只是用ScrlBar控制閥值而已
    edtThreshold->Text=ScrlBarThreshold->Position;
    Bmp->Assign(OriginPic->Picture->Bitmap);
    for( j=0 ; j< Bmp-> Height ;  j++) 
    {
      ptr = (Byte *)Bmp->ScanLine[j];
      for( i=0 ; i < Bmp->Width ; i++)
      {
        b=ptr[i*3];
        g=ptr[i*3+1];
        r=ptr[i*3+2];
        gray=0.299*r +0.587*g+0.114*b;
        if(gray>threshold)
            gray=255;
        else
            gray=0;
        ptr[i*3]=(Byte)gray;
        ptr[i*3+1]=(Byte)gray;
        ptr[i*3+2]=(Byte)gray;
      }
    }
    ChangePic->Picture->Assign(Bmp);
    delete Bmp;
------------------------------------------- 請問這問題是出在哪阿? 對了...我上述兩個放大後的圖用photoshop都開不了 它說"此檔案格式模組無法剖析檔案" 所以可能是檔案的問題嗎? 多謝各位的幫忙~~~ 發表人 -
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-02 14:46:09 IP:220.135.xxx.xxx 未訂閱
引言: 左上圖是我參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=32450 的放大程式碼所得到的圖。而右上圖是我寫的二值化程式後所跑出來的結果 再左上圖是我參考 http://delphi.ktop.com.tw/topic.php?topic_id=34732 的內插法放大所得到的圖。而右上圖是我寫的二值化程式後所跑出來的結果。 奇怪的是兩者都有右半邊跑不出的怪現象 就算跑出來也不是純二值化....有綠色、黃色等的雜訊 底下是我的二值化程式: ------------------------------------------------------ Graphics::TBitmap *Bmp = new Graphics::TBitmap(); Byte *ptr; int r,g,b; int gray; int i,j; int threshold; threshold=ScrlBarThreshold->Position; //這只是用ScrlBar控制閥值而已 edtThreshold->Text=ScrlBarThreshold->Position; Bmp->Assign(OriginPic->Picture->Bitmap); for( j=0 ; j< Bmp-> Height ; j加加) //奇怪 我的"加"顯示不出來XD { ptr = (Byte *)Bmp->ScanLine[j]; for( i=0 ; i < Bmp->Width ; i加加 ) { b=ptr[i*3]; g=ptr[i*3加1]; r=ptr[i*3加2]; gray=0.299*r 加0.587*g加0.114*b; if(gray>threshold) gray=255; else gray=0; ptr[i*3]=(Byte)gray; ptr[i*3加1]=(Byte)gray; ptr[i*3加2]=(Byte)gray; } } ChangePic->Picture->Assign(Bmp); delete Bmp; ------------------------------------------- 請問這問題是出在哪阿? 對了...我上述兩個放大後的圖用photoshop都開不了 它說"此檔案格式模組無法剖析檔案" 所以可能是檔案的問題嗎? 多謝各位的幫忙~~~ < face="Verdana, Arial, Helvetica"> 發表程式時,請參照版規做修改。謝謝合作 版規 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=47262
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-02 15:07:54 IP:220.135.xxx.xxx 未訂閱
chatman你好: 請問你的來源圖片是色板24bits嗎?因為我使用24bits的圖片是正確的 如果你的來源圖片不是24bits,依照程式的寫法去執行錯的。
chatman
一般會員


發表:7
回覆:2
積分:1
註冊:2004-10-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-02 16:02:36 IP:220.139.xxx.xxx 未訂閱
引言: chatman你好: 請問你的來源圖片是色板24bits嗎?因為我使用24bits的圖片是正確的 如果你的來源圖片不是24bits,依照程式的寫法去執行錯的。
恩恩 後來我把所有有關處理此圖檔的程式加上了 Bitmap->PixelFormat = pf24bit; 後,的確可以成功的二值化也可能用photoshop開啟了 沒想到只是這麼簡單的道理阿~~我好嫩> >
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-02 16:53:59 IP:220.135.xxx.xxx 未訂閱
引言: 恩恩 後來我把所有有關處理此圖檔的程式加上了 Bitmap->PixelFormat = pf24bit; 後,的確可以成功的二值化也可能用photoshop開啟了 沒想到只是這麼簡單的道理阿~~我好嫩>如果沒設定> 那是不是以後圖片的處理最好都要加上> > < face="Verdana, Arial, Helvetica"> chatman你好: 查一下PixelFormat的說明,應該不難了解它的物理意義,每個像素的RGB在不同的 格式下有不同的排列方式。之所以會建議使用pf24bit,是因為用這格式在寫程式 時,比較好套用RGB(8bit,8bit,8bit)觀念,寫程式時比較方便。 但如果遇到輸入圖不為pf24bit,在讀取每個像素時就要特別注意,因為RGB並不會 8bits,8bits排列。 發表人 - jerrykuo 於 2004/12/02 16:59:00
系統時間:2024-05-21 6:02:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!