[爆卦]unsigned宣告是什麼?優點缺點精華區懶人包

為什麼這篇unsigned宣告鄉民發文收入到精華區:因為在unsigned宣告這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者ray3226 (邦)看板C_and_CPP標題[問題] 關於unsigned char如何比大...


我想要讀入一個raw的512*512灰階圖檔作濾波

所以byte為單位將每個pixel存進矩陣裡

又因為pixel裡面的值應為0~255而非-128~127

所以我將矩陣宣告如下

unsigned char img[512][512];

接下來因為用3*3的mask與原圖作convolution後

我把它存到一個新的矩陣(512+3-1=514)

unsigned char newimg[514][514];

後來發現因為conv出來的數值有可能超過255或低於0

於是作了如下的for loop做修正

for (int i=0; i<514; i++)
for (int j=0; j<514; j++)
{
if (newimg[i][j]>255)
newimg[i][j]=255;
else if (newimg[i][j]<0)
newimg[i][j]=0;
}

但發現build會出現

warning: comparison is always false due to limited range of data type

我想可能是char無法跟整數直接比較大小

於是用了一個很笨的方法...

重新宣告一個double a

把img的值先assign給它再做比較

程式可以跑而且圖形也是正確的

但仍然會出現

warning: converting to `unsigned char' from `double'


想問大家要怎樣作才能讓warning不再出現

而且又可以讓unsigned char裡頭的值比大小?

謝謝!








--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.35.1.66
blexx:newimg已經存成unsigned char,不可能比255大。 10/27 10:04
blexx:要在存進去之前就先檢查 10/27 10:05
VictorTom:計算過程可能uchar不夠放就用比較大的變數型態暫存. 10/27 10:31
VictorTom:不然等到寫回uchar array以後才判斷就沒意義了@_@" 10/27 10:32
ray3226:樓上兩位大大 所以我才用一個較大的變數型態double a暫存 10/27 18:40
ray3226:而且再存進去之前先檢查 我的意思是這樣會產生warning.... 10/27 18:41
VictorTom:貼一下code來看, 從你貼出來的部份看不出有做這種事@_@" 10/27 18:56
VictorTom:你的warning發生在 if(newimg[i][j]>255) 這行, 它明白 10/27 18:57
VictorTom:說, newimg[i][j]是uchar, 最大就255, 你判斷它有沒有大 10/27 18:58
VictorTom:於255這肯定會fail. <0也一樣, 一個值域在0~255的變數, 10/27 18:59
VictorTom:(array中的一個element在這裡可以當一個變數來看待) 10/27 18:59
VictorTom:你判斷它是否<0或者>255這些都肯定都是false(上面錯字). 10/27 19:00
VictorTom:我看到後半段的問題了Orz 在算好的double assign給 10/27 19:03
VictorTom:uchar變數前用顯示轉型, 如img = (uchar)(a + 0.5); 10/27 19:04
VictorTom:+0.5是四捨五入, 你自己依需求決定有沒有必要吧:) 10/27 19:04
VictorTom:warning是提醒你你的assignment可能有忽略到這個問題, 10/27 19:05
VictorTom:強轉型就是跟compiler說, 我就要這麼做, 聽我的就對了XD 10/27 19:05
ray3226:謝謝V大 之前學C++時沒學過「顯示轉型」 所以說如果不+0.5 10/27 19:11
ray3226:它會無條件捨去嗎? 10/27 19:11
VictorTom:忘了是顯式還是強制轉型, 小弟沒看原文書, 術語請其他大 10/27 19:14
VictorTom:大補充吧XD 是的, 基本型態浮點轉整數一定無條件捨去:) 10/27 19:15
VictorTom:剛想到, 考慮有負數, 還是說round_to_zero好了....@_@" 10/27 19:16
ray3226:十分感謝V大 剛剛試成功了! 最近在學ICS影像處理的專題 10/27 19:29
ray3226:C++很多都忘了 剛剛爬V大文章似乎對影像頗有研究 以後請多 10/27 19:30
ray3226:多指教! 10/27 19:31
VictorTom:什麼??對影像處理有研究!?那你一定是認錯人了....XD 10/27 19:41

你可能也想看看

搜尋相關網站