convertTo的用法
src.convertTo(dst, type, scale, shift)
img參數為圖像數據來源,其類型為Mat。
注意也不是所有格式的Mat型數據都能被使用保存為圖片,目前OpenCV主要只支持單通道和3通道的圖像,並且此時要求其深度為8bit和16bit無符號(即CV_16U),所以其他一些數據類型是不支持的,比如說float型等。(注:這個還有待考證。)
如果Mat類型數據的深度和通道數不滿足上面的要求,則需要使用convertTo()函數和cvtColor()函數來進行轉換。
convertTo()函數負責轉換數據類型不同的Mat,即可以將類似float型的Mat轉換到imwrite()函數能夠接受的類型。
而cvtColor()函數是負責轉換不同通道的Mat,因為該函數的第4個參數就可以設置目的Mat數據的通道數(只是我們一般沒有用到它,一般情況下這個函數是用來進行色彩空間轉換的)。
另外也可以不用imwrite()函數來存圖片數據,可以直接用通用的XML IO接口函數將數據存在XML或者YXML中。
縮放並轉換到另外一種數據類型:
1 dst:目的矩陣; 2 type:需要的輸出矩陣類型,或者更明確的,是輸出矩陣的深度,如果是負值(常用-1)則輸出矩陣和輸入矩陣類型相同; 3 scale:比例因子; 4 shift:將輸入數組元素按比例縮放后添加的值;
dst(i)=src(i)xscale+(shift,shift,...)
如果scale=1,shift=0,則不進行比例縮放。
如果輸入數組與輸出數組的類型相同,則函數可以被用於縮放和平移矩陣或圖像;
例:cv::Mat src, src_f; image.convertTo(src_f, CV_32F, 1.0/255, 0); 圖像大小沒有變化,但是類型又UINT8變為了FLOAT32位,感覺還有待認識,僅供參考,有知道的朋友請解惑,謝謝!