Re: [問題] 關於影像二值化??

看板C_and_CPP作者 (mr.fu)時間12年前 (2011/10/05 23:22), 編輯推噓0(007)
留言7則, 3人參與, 最新討論串2/3 (看更多)
※ 引述《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)

10/05 23:27, , 1F
似乎沒改對.. 轉型問題.
10/05 23:27, 1F

10/05 23:27, , 2F
(float)Bsum /(ImgHeight)*(ImgWidth);
10/05 23:27, 2F

10/05 23:30, , 3F
歐歐如果照我原本寫的要增加樓上這個
10/05 23:30, 3F

10/05 23:31, , 4F
如果是我修文的那個邏輯的話...不用Bsum XD
10/05 23:31, 4F

10/05 23:33, , 5F
痾雖然不用Bsum但是也要小心轉型問題不然除完會變成0 XD
10/05 23:33, 5F

10/05 23:54, , 6F
想請問是改成文中那一段嗎??Bsum要改成float形態嗎??
10/05 23:54, 6F

10/06 00:15, , 7F
Bsum 不適合用 float, 加到後來精度問題會等於沒加。
10/06 00:15, 7F
文章代碼(AID): #1EZ7OS94 (C_and_CPP)
文章代碼(AID): #1EZ7OS94 (C_and_CPP)