【圖像處理】C++編程實現中需要注意的數據類型問題

圖像處理編程實現中需要注意的數據類型問題

        Opencv中cvLoadImage函數可以將圖像以單通道灰度圖、三通道彩色圖、原圖自身效果這三種形式讀入。不論是哪種形式讀入,在處理像素值大小的時僅可選擇下列7種數據類型中的一種:

 
IPL_DEPTH_8U - 無符號8位整型
IPL_DEPTH_8S - 有符號8位整型
IPL_DEPTH_16U - 無符號16位整型
IPL_DEPTH_16S - 有符號16位整型
IPL_DEPTH_32S - 有符號32位整型
IPL_DEPTH_32F - 單精度浮點數
IPL_DEPTH_64F - 雙精度浮點數

 
       下面是一個 自定義的兩幅圖像相加函數And,在處理圖像中選擇的是  IPL_DEPTH_8U - 無符號8位整型 數據類型。
       爲了處理數據溢出問題,就加了一句if,對像素值超過255的位置重新設置像素爲255,但是運行的結果仍然有數據溢出問題。調試發現,程序並未進入if語句的處理過程,因此,導致數據溢出。

 

 
 

 

 
邏輯上這樣處理是正確的,可以解決數據溢出的問題,但是計算機關注的的細節問題是 無符號8位整型 的最大值爲255,永遠不可能大於255,if語句在這裏形同虛設。

 

 
 

 
解決方法是新定義一個無符號int型變量,作爲中間變量,解決uchar型數據不可能大於255的問題。
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章