opencv-imwrite保存函數


注意不是所有格式的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;
}

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM