imwrite用法(opencv存图像)

ex1:

#include<opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
 Mat imgsrc = imread("lena.jpg",0);
 if(imgsrc.data == NULL) return -1;
 //cout<<imgsrc.channels()<<endl;
 namedWindow("my",WINDOW_AUTOSIZE);
 imshow("my",imgsrc);
 imwrite("my.jpg",imgsrc);
 waitKey(0);
 destroyWindow("my");
 imgsrc.release();
 return 0;
}

首先来看看imwrite()函数的具体用法。

  bool imwrite(const string& filename, InputArray img, const vector<int>& params=vector<int>() )

  该函数是把程序中的Mat类型的矩阵保存为图像到指定位置。

  参数filename为所需保存图像的文件目录和文件名。这里的文件名需要带有图像格式后缀的,目前OpenCV该函数只支持JPEG,PNG,PPM,PGM,PBM,TIFF等。并不是所有Mat类型都支持。

  img参数为图像数据来源,其类型为Mat。注意也不是所有格式的Mat型数据都能被使用保存为图片,目前OpenCV主要只支持单通道和3通道的图像,并且此时要求其深度为8bit和16bit无符号(即CV_16U)。所以其他一些数据类型是不支持的,比如说float型等。如果Mat类型数据的深度和通道数不满足上面的要求,则需要使用convertTo()函数和cvtColor()函数来进行转换。convertTo()函数负责转换数据类型不同的Mat,即可以将类似float型的Mat转换到imwrite()函数能够接受的类型。而cvtColor()函数是负责转换不同通道的Mat,因为该函数的第4个参数就可以设置目的Mat数据的通道数(只是我们一般没有用到它,一般情况下这个函数是用来进行色彩空间转换的)。另外也可以不用imwrite()函数来存图片数据,可以直接用通用的XML IO接口函数将数据存在XML或者YXML中。

  参数params是用来设置对应图片格式的参数的,因为一般情况下这些图片格式都是经过了压缩的,这里就是设置这些压缩参数来控制图片的质量。该参数是一个vector<int>类型,里面分别存入paramId_1, paramValue_1, paramId_2, paramValue_2, ... 也就是说存入一对属性值。如果不设置该参数的话,则程序会自动根据所保存的图像格式采用一个默认的参数。

这里主要就是用到了 imwrite("要存的图像名字.格式",imgsrc,para),主要讲一下这个para,它是个vector<int>类型。这个参数有三种,可以是:

1、JPEG,参数为CV_IMWRITE_JPEG_QUALITY,它的值是从0到100,值越小压缩的越多,默认值是95.

2、PNG,参数为CV_IMWRITE_PNG_COMPRESSION,它的值是从0到9,值越大表示图片尺寸越小,压缩时间越长。默认值是3。

3、PPM,PGM或者PBM,参数为CV_IMWRITE_PXM_BINARY,它的值是0或者1。默认值是1。

ex2:

#include<opencv2/opencv.hpp>

#include<vector>

using namespace cv;
using namespace std;

int main()
{
 Mat imgsrc = imread("lena.jpg",0);
 if(imgsrc.data == NULL) return -1;
 //cout<<imgsrc.channels()<<endl;
 namedWindow("my",WINDOW_AUTOSIZE);
 imshow("my",imgsrc);

vector<int> compression_params;

compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);

compression_params.push_back(100);
 imwrite("my.jpg",imgsrc,compression_params);
 waitKey(0);
 destroyWindow("my");
 imgsrc.release();
 return 0;
}

猜你喜欢

转载自blog.csdn.net/cs20171001/article/details/73303191