python opencv中的imwrite函数_OpenCV之imwrite

1、imwrite

imwrite函数用于将图像保存到指定的文件。

CV_EXPORTS_W bool imwrite( const String& filename, InputArray img, const std::vector& params = std::vector());

1、filename保存路径

2、源图像

3、第三个参数:const std::vector&类型的params,表示为特定格式保存的参数编码,它有默认值std::vector(),所以一般情况下不需要填写。如果更改的话,对于不同的图片格式,其对应的值不同功能不同,如下:

对于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.

2、Vec4b

typedef Vec Vec2b;

Vec2b—表示每个Vec2b对象中,可以存储2个char(字符型)数据

Vec3b—表示每一个Vec3b对象中,可以存储3个char(字符型)数据,比如可以用这样的对象,去存储RGB图像中的

Vec4b—表示每一个Vec4b对象中,可以存储4个字符型数据,可以用这样的类对象去存储—4通道RGB+Alpha的图

3、saturate_cast

就是防止数据溢出,具体的原理可以大致描述如下:

if(data<0)

data=0;

if(data>255)

data=255

实例:

pResultData[j]= cv::saturate_cast(255 - pSrcData[j]);

4、 例子

0b7e2fbc38234a41616d0f7773261e8b.png

#include "mainwindow.h"

#include

#include

#include

using namespace cv;

using namespace std;

void createAlphaMat(Mat &mat)

{

for(int i = 0; i < mat.rows; ++i)

{

for(int j = 0; j < mat.cols; ++j)

{

Vec4b &rgba = mat.at(i, j); //每一个Vec4b对象中,可以存储4个字符型数据,可以用这样的类对象去存储—4通道RGB+Alpha的图

rgba[0] = UCHAR_MAX;

rgba[1] = saturate_cast((float (mat.cols - j))/ ((float)mat.cols) * UCHAR_MAX);

rgba[2] = saturate_cast((float (mat.rows - j))/ ((float)mat.rows) * UCHAR_MAX);

rgba[3] = saturate_cast(0.5 * (rgba[1] + rgba[2]));

}

}

}

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

//创建带Alpha通道的Mat

Mat mat(480, 640, CV_8UC4);

createAlphaMat(mat);

vectorcompression_params;

compression_params.push_back(IMWRITE_PNG_COMPRESSION);

compression_params.push_back(9);

try{

imwrite("Alpha.png", mat, compression_params);

imshow("created png", mat);

fprintf(stdout, "PNG图片文件的alpha数据保存完毕!可以在工程目录下查看\n");

waitKey(0);

}catch(runtime_error & ex){

fprintf(stderr, "图像转换成gng格式发生错误", ex.what());

return 1;

}

return a.exec();

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值