關於距離變換函式distanceTransform使用注意事項
阿新 • • 發佈:2019-02-16
顯示圖片 imshow
1 | voidimshow(conststring&winname,InputArray mat) |
在視窗中顯示圖片,對於NORMAL的視窗,把圖片縮放到視窗固定大小,再顯示。根據影象資料的深度,對影象進行下面的處理:
8-bit unsigned 直接顯示
16-bit unsigned or 32-bit integer 畫素點值除以256,即把[0,255*256] 對映到 [0,255]
32-bit floating-point 畫素點值乘以255,即把[0,1] 對映到 [0,255]
所以,imshow可以正常顯示取值範圍[0,255]的uchar型影象、取值範圍[0,1]的float或double型別影象。
單通道uchar 型別Mat在顯示圖片時,Mat資料應在uchar資料範圍內,即0~255。 若資料值不在0~255內,則Mat會以256為週期,把資料平移至0~255範圍內。 比如 資料為256,則Mat會把資料轉化成0,因此顯示為黑色。
若float資料<0,則會顯示為黑色。若float資料>1,則會顯示為白色。
-------------------------------
所以使用完distanceTransform得到的resultImgtemp矩陣裡面的資料都是浮點型!
由於只有前景有灰度值,背景為0,前景的灰度為float型>1則顯示白色,所以不處理直接cv::imshow("最終resultImg",resultImgtemp);得到的跟二值化影象一樣的圖。
需要cv::normalize(resultImgtemp,resultImgtemp,0,1,cv::NORM_MINMAX);給歸一化到0-1,這樣顯示的時候可以自動變換成0-255。