注意不是所有格式的Mat型數據都能被使用保存為圖片,目前OpenCV主要只支持單通道和3通道的圖像,並且此時要求其深度為8bit和16bit無符號(即CV_16U)
保存PNG格式的時候可以保存透明通道的圖片
可以指定壓縮參數
如果Mat類型數據的深度和通道數不滿足上面的要求,則需要使用convertTo()函數和cvtColor()函數來進行轉換。convertTo()函數負責轉換數據類型不同的Mat,即可以將類似float型的Mat轉換到imwrite()函數能夠接受的類型。而cvtColor()函數是負責轉換不同通道的Mat,因為該函數的第4個參數就可以設置目的Mat數據的通道數(只是我們一般沒有用到它,一般情況下這個函數是用來進行色彩空間轉換的)。另外也可以不用imwrite()函數來存圖片數據,可以直接用通用的XML IO接口函數將數據存在XML或者YXML中
//IDE:VS2019 #include<opencv2/opencv.hpp> #include<iostream> #include <vector> int main(int argc, char** argv) { cv::Mat img = cv::imread("D:/bb/tu/sansui.jpg"); std::vector< int > par; //創建vector對象,用來存儲質量壓縮信息 par.push_back(cv::IMWRITE_JPEG_QUALITY); //jpg格式 par.push_back(50); cv::imwrite("D:/bb/tu/test.jpg", img,par); //保存圖像 /*參數3:該參數是一個vector<int>類型, 表示為特定格式保存的參數編碼,它有一個默認值std::vector< int >(),所以一般情況下不用寫 里面分別存入paramId_1, paramValue_1, paramId_2, paramValue_2, ... 也就是說存入一對屬性值。如果不設置該參數的話,則程序會自動根據所保存的圖像格式采用一個默認的參數 如果更改的話,對於不同的圖片格式,其對應的值不同功能不同,如下: 對於JPEG格式的圖片,這個參數表示從0-100的圖片質量(cv::IMWRITE_JPEG_QUALITY),默認值是95 對於PNG格式的圖片,這個參數表示壓縮級別(cv::IMWRITE_PNG_COMPRESSION)從0-9.較高的值意味着更小的尺寸和更長的壓縮時間而默認值是3 對於PPM,PGM或PBM格式的圖片,這個參數表示一個二進制格式標志(cv::IMWRITE_PXM_BINARY),取值為0或1,而默認值為1 */ cv::waitKey(); return 0; }