【OpenCV 4开发详解】图像与视频的保存

本文介绍OpenCV 4中如何保存图像和视频。`imwrite()`函数用于保存图像,支持多种格式,可处理特殊数据。`VideoWriter()`类则用于生成视频文件,涉及帧率、编解码器等参数设定。通过示例代码,阐述了保存带有Alpha通道图像和创建视频文件的过程。
摘要由CSDN通过智能技术生成
本文首发于 “小白学视觉”微信公众号,欢迎关注公众号
本文作者为小白,版权归 人民邮电出版社发行所有,禁止转载,侵权必究!

经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。

在图像处理过程中会生成新的图像,例如将模糊的图像经过算法变得更加清晰,将彩色图像变成灰度图像,同时需要将处理的结果以图像或者视频的形式保存成文件。本节将详细讲述如何将Mat类矩阵保存成图像或者视频文件。

2.4.1 图像的保存

OpenCV提供imwrite()函数用于将Mat类矩阵保存成图像文件,该函数的函数原型在代码清单2-30中给出。

代码清单2-30 imwrite()函数原型
1.	bool cv :: imwrite(const String& filename,
2.	                       InputArray img,
3.	                       Const std::vector<int>& params = std::vector<int>()
4.	                       )
  • filename:保存图像的地址和文件名,包含图像格式
  • img:将要保存的Mat类矩阵变量
  • params:保存图片格式属性设置标志

该函数用于将Mat类矩阵保存成图像文件,如果成功保存,则返回true,否则返回false。可以保存的图像格式参考imread()函数能够读取的图像文件格式,通常使用该函数只能保存8位单通道图像和3通道BGR彩色图像,但是可以通过更改第三个参数保存成不同格式的图像。不同图像格式能够保存的图像位数如下:

  • 16位无符号(CV_16U)图像可以保存成PNG、JPEG、TIFF格式文件;
  • 32位浮点(CV_32F)图像可以保存成PFM、TIFF、OpenEXR和Radiance HDR格式文件;
  • 4通道(Alpha通道)图像可以保存成PNG格式文件。

函数第三个参数在一般情况下不需要填写,保存成指定的文件格式只需要直接在第一个参数后面更改文件后缀即可,但是当需要保存的Mat类矩阵中数据比较特殊时(如16位深度数据),则需要设置第三个参数。第三个参数的设置方式如代码清单2-31中所示,常见的可选择设置标志在表2-6中给出。

代码清单2-31 imwrite()函数中第三个参数设置方式
1.	vector <int> compression_params;
2.	compression_params.push_back(IMWRITE_PNG_COMPRESSION);
3.	compression_params.push_back(9);
4.	imwrite(filename, img, compression_params)
表2-6 imwrite()函数第三个参数可选择的标志及作用
标志参数 简记 作用
IMWRITE_JPEG_QUALITY 1 保存成JPEG格式的文件的图像质量,分成0-100等级,默认95
IMWRITE_JPEG_PROGRESSIVE 2 增强JPEG格式,启用为1,默认值为0(False)
IMWRITE_JPEG_OPTIMIZE 3 对JPEG格式进行优化,启用为1,默认参数为0(False)
IMWRITE_JPEG_LUMA_QUALITY 5 JPEG格式文件单独的亮度质量等级,分成0-100,默认为0
IMWRITE_JPEG_CHROMA_QUALITY 6 JPEG格式文件单独的色度质量等级,分成0-100,默认为0
IMWRITE_PNG_COMPRESSION 16 保存成PNG格式文件压缩级别,从0-9,只越高意味着更小尺寸和更长的压缩时间,默认值为1(最佳速度设置)
IMWRITE_TIFF_COMPRESSION 259 保存成TIFF格式文件压缩方案

为了更好的理解imwrite()函数的使用方式,在代码清单2-32中给出了生成带有Alpha通道的矩阵,并保存成PNG格式图像的程序。程序运行后会生成一个保存了4通道的png格式图像,为了更直观的看到图像结果,我们在图2-8中给出了Image Watch插件中看到的图像和保存成png格式的图像。

代码清单2-32 imgWriter.cpp保存图像
1.	#include <opencv2\opencv.hpp>
2.	#include <iostream>
3.	
4.	using	namespace std;
5.	using	namespace cv;
6.	
7.	void AlphaMat(Mat &mat)
8.	{
   
9.		CV_Assert(mat.channels(
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学视觉

您的赞赏是我们坚持下去的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值