1. 程式人生 > >關於距離變換函式distanceTransform使用注意事項

關於距離變換函式distanceTransform使用注意事項

顯示圖片 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。