案例8:图像保存(imwrite与一次保存多张图像的imwritemulti讲解)

案例8:图像保存(imwrite与一次保存多张图像的imwritemulti讲解),第1张

案例8:图像保存(imwrite与一次保存多张图像的imwritemulti讲解)

本文分享内容来自图书《学习OpenCV 4:基于Python的算法实战》,该书刚刚上市,是国内第一本系统讲解OpenCV4各个模块的图书,配套案例深入浅出的讲解。第一章有在各个平台搭建环境的介绍,后面每个章节都有对模块的导读、模块经典算法的案例介绍以及进阶阅读,适合图像处理、计算机视觉领域的初学者以及相关的工程开发人员。目录如下:

第1章 OpenCV快速入门;
第2章 图像读写模块imgcodecs;
第3章 核心库模块core;
第4章 图像处理模块imgproc(一);
第5章 图像处理模块imgproc(二);
第6章 可视化模块highgui;
第7章 视频处理模块videoio;
第8章 视频分析模块video;
第9章 照片处理模块photo;
第10章 2D特征模块features2d;
第11章 相机标定与三维重建模块calib3d;
第12章 传统目标检测模块objdetect;
第13章 机器学习模块ml;
第14章 深度神经网络模块dnn

欢迎关注图书《深度学习计算机视觉实战》与《学习OpenCV4:基于Python的算法实战》,两本书都以通俗易懂的讲解、丰富的案例帮助初学者学习视觉与图像方向的知识。欢迎guanzhu“计算机视觉与OpenCV”获取更多的学习资料。


图像处理之后,经常需要将处理结果保存到本地文件中,此时需要使用OpenCV中的图像保存函数imwrite。
imwrite函数的C++语言函数定义如下:

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

imwrite函数的Python语言函数定义如下:

retval = imwrite(filename, img, params=None)

imwrite函数的参数说明如下:
filename:保存的文件名称;
img:Mat或者vector类型的图像;
params:格式化编码为成对的特定参数,该参数可选,参数定义在cv::ImwriteFlags中;
retval,图像保存是否成功的标志,bool类型,保存成功返回true,保存失败返回false(返回值)。
图像保存标志cv::ImwriteFlags的定义如下:

enum ImwriteFlags {
       IMWRITE_JPEG_QUALITY        = 1, //对JPEG图像该值设置图像质量,值从0到100 ,越高越好
                                            // ,默认值95.
       IMWRITE_JPEG_PROGRESSIVE    = 2, //允许JPEG特征, 0或者1,默认False.
       IMWRITE_JPEG_OPTIMIZE       = 3, //允许JPEG特征, 0或者1,默认False.
       IMWRITE_JPEG_RST_INTERVAL   = 4, //JPEG重启间隔, 值从0到65535, 默认值为0
       IMWRITE_JPEG_LUMA_QUALITY   = 5, //分离luma质量等级, 值从0 到100, 默认值0.
       IMWRITE_JPEG_CHROMA_QUALITY = 6, //分离chroma质量等级,值从 0 到100, 默认值0   			  IMWRITE_PNG_COMPRESSION     = 16, //压缩等级,值从 0 到9,默认值1
       IMWRITE_PNG_STRATEGY         = 17, //cv::ImwritePNGFlags之一,默认值为 					                                       //IMWRITE_PNG_STRATEGY_RLE.
       IMWRITE_PNG_BILEVEL         = 18, //PNG二进制等级, 值为0 或1, 默认值为 0.
       IMWRITE_PXM_BINARY          = 32, //对PPM, PGM或PBM,该值为格式标志,值为 0 或1. 默认值为1
       IMWRITE_EXR_TYPE            	= (3 << 4) + 0,  //重载EXR存储类型   	 	          	  IMWRITE_WEBP_QUALITY        = 64, //对于WEBP,该值为质量1到100
       IMWRITE_PAM_TUPLETYPE       = 128, //对于PAM,将TUPLETYPE字段设置为为格式定义的相应字符串值
       IMWRITE_TIFF_RESUNIT 		= 256, //对于TIFF,用于指定要设置的DPI
       IMWRITE_TIFF_XDPI 		= 257, //对于TIFF, 用于指定X方向DPI
       IMWRITE_TIFF_YDPI 		= 258, //对于TIFF, 用于指定Y方向DPI
       IMWRITE_TIFF_COMPRESSION 	= 259, //对于TIFF,用于指定图像压缩方案
       IMWRITE_JPEG2000_COMPRESSION_X1000 = 272 //对于JPEG2000, 用于指定目标压缩率,值从0到1000,
									    //默认值为1000.
     };

本案例调用imread读取图像,读取模式为灰度图并将尺寸缩减为原图的1/2,后调用imwrite进行图像保存,Python语言案例代码如下:

import cv2

img = cv2.imread("src.jpg", cv2.IMREAD_REDUCED_GRAYSCALE_2)                 #图像读取
if img is None:
    print("Image Read Error!")
else:
    stat = cv2.imwrite("dst_2.jpg", img)  # 图像保存
    if(stat):
        print("Image Write Success!")

执行完成之后,会在当前路径下保存文件名为dst_2.jpg的图像文件,并输出打印信息"Image Write Success!",表明文件保存成功。
多图像保存为一个图像文件的函数imwritemulti没有C++函数导出(有内联函数,见2.1节),因为多幅图像写入文件功能被imwrite函数重载了。imwritemulti函数的Python语言函数定义如下:

retval = imwritemulti(filename, img, params=None)

imwritemulti函数的参数说明如下:
filename:保存的图像文件名称;
img:图像数据;
params:格式化编码为成对的特定参数,该参数可选,参数定义在cv::ImwriteFlags中;
retval,图像保存是否成功的标志,bool类型,保存成功返回true,保存失败返回false(返回值)。
读取多幅图像,并调用imwritemulti保存多幅图像到一个图像文件的案例代码如下:

import cv2

img1 = cv2.imread("src.jpg")                  #第一幅图像读取
img2 = cv2.imread("src1.jpg")                 #第二幅图像读取
img3 = cv2.imread("src2.jpg")                 #第三幅图像读取
img = [img1, img2, img3]
stat = cv2.imwritemulti("dst_tiff.tiff", img)  # 图像保存
if (stat):
    print("Image Write Success!")

保存后在路径下生成dst_tiff.tiff文件,并输出保存成功的打印信息。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5711978.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存