本文分享内容来自图书《学习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文件,并输出保存成功的打印信息。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)