opencv默認讀入圖像的數據類型為 uchar 一個字節。
利用OpenCV的 imwrite 函數 可以將 uchar 8位 和 uint6_t 16位數據保存在 jpg 或 png圖像中。
CV_32F 數據可以保存為PFM,TIFF,OpenEXR和Radiance HDR格式
https://blog.csdn.net/mars_xiaolei/article/details/62233900
imwrite 可以定義數據的壓縮等級, void imwrite(string filename, Mat src, compression_params )
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
compression_params.push_back(0); // 無壓縮png.默認壓縮值為1
讀入深度圖像
imread(string filename, int flag);
默認讀入數據類型為 uchar,3通道, flag為1 (IMREAD_COLOR)。
若想讀入灰度圖(單通道、uchar類型),那么 flag 可以設置為 0(IMREAD_GRAYSCALE)
對於CV_16U的數據類型,需要注明是讀入任意深度數據,那么 flag 為2 (IMREAD_ANYDEPTH),此時還是三通道(每個通道均為相同的值)。
需要用 split 分離出單通道。
顯示圖像
imshow( string windowname, Mat src) 只能顯示 uchar 類型的圖像
對於 深度為 CV_16U 之類的數據需要先進行轉換,否則會報錯。
如下則可以:
cv::Mat temp; src.convertTo(temp, CV_8UC1, 255.0 / 131071); cv::equalizeHist(temp, temp); // 均衡化直方圖,讓圖像看起來更明顯 cv::imshow("image", temp); cv::waitKey();
