作者goodrain (mr.fu)
看板C_and_CPP
標題Re: [問題]關於影像二值化??
時間Wed Oct 5 23:22:01 2011
※ 引述《kiyasuto1 (kiy)》之銘言:
: 各位前輩好!!小弟是用BCB作的二值化,寫了個副程式,
: 想用圖的所有像素灰階值相加除以總像素數目來作門檻!
: (門檻=所有像素灰階值相加/總像素數目)
: 程式碼如下
: void tw(Byte **a)
: {
: int Bsum;
: float Background;
: for(int i = 0; i < ImgWidth; i++)
: {
: for(int j = 0; j < ImgHeight; j++)
: {
: Background=(Bsum+=a[i][j])/((ImgHeight)*(ImgWidth));
: }
: }
這一段改成
for(int i = 0; i < ImgWidth; i++)
{
for(int j = 0; j < ImgHeight; j++)
{
Bsum+=a[i][j];
}
}
Background= Bsum /(ImgHeight)*(ImgWidth);
: for(int i = 0; i < ImgWidth; i++)
: {
: for(int j = 0; j < ImgHeight; j++)
: {
: if( a[i][j] > Background )
: a[i][j] = 0;
: else
: a[i][j] = 255;
: }
: }
: }
: 但是編譯結果好像在計算門檻那一行爆掉了...
: 希望前輩們能指正一下小弟~~感謝!!拜託~
至於為什麼出錯....
自己重想一下邏輯
都還沒加完就心急著平均 XD
好吧好人當到底 XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.65.218
※ 編輯: goodrain 來自: 140.115.65.218 (10/05 23:23)
毆我好像有點懂你的邏輯了XD
那樣的話應該是把A[i][j]除完後直接與Background相加就好
※ 編輯: goodrain 來自: 140.115.65.218 (10/05 23:29)
→ tropical72:似乎沒改對.. 轉型問題. 10/05 23:27
→ tropical72:(float)Bsum /(ImgHeight)*(ImgWidth); 10/05 23:27
→ goodrain:歐歐如果照我原本寫的要增加樓上這個 10/05 23:30
→ goodrain:如果是我修文的那個邏輯的話...不用Bsum XD 10/05 23:31
→ goodrain:痾雖然不用Bsum但是也要小心轉型問題不然除完會變成0 XD 10/05 23:33
→ kiyasuto1:想請問是改成文中那一段嗎??Bsum要改成float形態嗎?? 10/05 23:54
→ tropical72:Bsum 不適合用 float, 加到後來精度問題會等於沒加。 10/06 00:15