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学习笔记(四) – 图像的放大与缩小