Opencv学習ノート(三)--画像圧縮と保存


1.画像圧縮


1.1一般的な画像フォーマット

  • bmp Windowsビットマップフォーマット.このフォーマットは非圧縮フォーマットであり、画像ファイルが大きいという欠点がある.
  • jpg JPEGは、静的画像のために確立された最初の国際デジタル画像圧縮規格であり、これまで使用されてきた最も広く応用されている画像圧縮規格でもある.この規格で生成されたファイル拡張子はjpgである.

  • 1.2圧縮ケース

  • 試験画像試験画像1920*1080解像度の風景画像.
  • 試験結果1.画像がbmpファイルとして保存されると、そのサイズは5.93 Mである.2.画像がjpgファイルとして保存されている場合、そのサイズは458 Kである.3.ファイルサイズから見ると、bmpファイルの占有スペースはjpgファイルの占有スペースの13.26倍である.

  • 2.関連関数


    imwrite

  • 関数機能は、画像データをファイル
  • に書き込む.
  • 関数プロトタイプ
  • CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,
                  const std::vector<int>& params = std::vector<int>());
  • 関数パラメータconst String&filename–ファイル保存パスInputArray img–保存する画像データconst std::vector¶ms=std::vector()–特定のフォーマットで保存されるパラメータ符号化、デフォルト値std::vector
  • 戻り値bool–保存に成功した場合、trueを返します.そうでなければfalseを返します.
    注意:
    1.この関数で画像を保存する場合は、ファイルを保存する親ディレクトリを事前に作成しておく必要があります.この関数は自動的に親ディレクトリを確立しません.親ディレクトリが存在しない場合、ファイル保存操作は失敗します.
    2.関数の3番目のパラメータが空の場合.ただし、画像圧縮率を正確に指定するには、圧縮パラメータを指定する必要があります.圧縮パラメータの設定は、以下のコードインスタンスを参照してください.

  • 3.コードインスタンス

  • コードは、本例が主に画像圧縮および保存動作を行う方法を示す.
  • テストプラットフォーム1.開発言語:C++2.開発ツール:VS 2015 3.OS:Win 7 X 64
  • 具体コード
  • #include 
    using namespace std;
    
    #include "cv.h"
    #include "opencv2\opencv.hpp"
    using namespace cv;
    
    #if _DEBUG
    #pragma comment(lib,"opencv_world340d.lib")
    #else
    #pragma comment(lib,"opencv_world340.lib")
    #endif
    
    int main()
    {
        Mat src = imread("D:\\OpencvTest\\test1.bmp");
    
        if (src.data != NULL)
        {
            vector<int>compression_params;
            compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);
            compression_params.push_back(90);     // , 0-100, , 
    
            bool bRet=imwrite("D:\\OpencvTest\\test2.jpg", src, compression_params);
            if (bRet)
            {
                cout << " " << endl;
            }
            else
            {
                cout << " " << endl;
            }
        }
        else
        {
            cout << " , !" << endl;
        }
    
        waitKey(0);
        getchar();
        return 0;
    }

    コラムナビゲーション前編:Opencv学習ノート(二)-最初のOpencvエンジニアリング-画像の読み込みと表示次編:Opencv学習ノート(四)-画像の拡大と縮小