Opencv学习笔记(三) -- 图像压缩与保存

1.图像压缩

1.1常用图像格式

  • bmp
    Windows位图格式。该格式为不压缩格式,缺点是图像文件较大。
  • jpg
    JPEG是为静态图像所建立的第一个国际数字图像压缩标准,也是至今一直在使用的、应用最广的图像压缩标准。该标准生成的文件扩展名为jpg。

1.2压缩案例

  • 测试图像
    测试图像为1920*1080分辨率的风景图像。
  • 测试结果
    1.当图像保存为bmp文件时,其大小为5.93M;
    2.当图像保存为jpg文件时,其大小为458K;
    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& params = std::vector() –特定格式保存的参数编码,默认值为std::vector< int >()。
  • 返回值
    bool – 保存成功时,返回true;否则返回false。
    注意:
    1.利用该函数保存图像时,必须提前建立好保存文件的上级目录。该函数不会自动建立上级目录,当上级目录不存在时,文件保存操作会失败;
    2.当该函数的第三个参数运行为空。但是如果要精确指定图像压缩率,则需要指定压缩参数。压缩参数的设置见下文中的代码实例。

3.代码实例

  • 代码说明
    本例主要展示如何进行图像压缩与保存操作。
  • 测试平台
    1.开发语言:C++
    2.开发工具:VS2015
    3.操作系统:Win7 X64
  • 具体代码
#include <iostream>
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学习笔记(四) – 图像的放大与缩小

猜你喜欢

转载自blog.csdn.net/u014337397/article/details/80738924