11.java openCV4.x 入门- Imgcodecs之图像读写

本文详细介绍了OpenCVImgcodecs类在图像处理中的功能,包括字段说明、单页和多页图像的读取方法imread和imdecode,以及单页和多页图像的保存函数imwrite和imwritemulti,展示了如何使用这些函数进行图像操作和质量调整。
摘要由CSDN通过智能技术生成
专栏简介

💒个人主页
📰专栏目录

点击上方查看更多内容
📖心灵鸡汤📖

我们唯一拥有的就是今天,唯一能把握的也是今天


建议把本文当作笔记来看,据说专栏目录里面有相应视频🤫
🧭文章导航🧭
⬆️ 10.特殊的Mat类汇总(二)
⬇️ 12.HighGui之图像窗口显示


  Imgcodecs类用于读取和保存图像。

一、字段

仅列举部分常用的字段

字段描述
IMREAD_ANYDEPTH如果设置,将返回16位/32位图像,否则将转换为8位
IMREAD_COLOR指定在加载图像时总是将其作为彩色图像读取,默认设置。如果原始图像是单通道黑白图,它将被转换为彩色图
IMREAD_GRAYSCALE指定在加载图像时总是将其作为灰度图像(单通道)读取
IMREAD_ANYCOLOR如果设置,图像将以任何可能的颜色格式读取
IMREAD_REDUCED_COLOR_2以彩色模式读取图像,但图像的尺寸被缩小为原始尺寸的1/2
IMREAD_REDUCED_GRAYSCALE_2以灰度模式读取图像,但图像的尺寸被缩小为原始尺寸的1/2
IMWRITE_PAM_FORMAT_RGB表示图像将以红绿蓝(RGB)颜色模型存储,这是彩色图像的标准格式
IMWRITE_JPEG_SAMPLING_FACTOR_444 设置JPEG色度子采样率为4:4:4,这是最高的色彩分辨率

二、读取图像

  仅列举部分方法。

1.读取单页图像

1.imread

1.从文件中加载图像

imread​(java.lang.String filename, int flags)
参数:
filename要加载的文件的地址
flags 标志,可以是IMREAD_*其一
        Mat imread = Imgcodecs.imread("img.png",Imgcodecs.IMREAD_GRAYSCALE);
        HighGui.imshow("imraed",imread);
        HighGui.waitKey();

2.imdecode​(Mat buf, int flags)

  从内存中的缓冲区读取图像。如果缓冲区太短或包含无效数据,则该函数返回一个空矩阵。

2.读取多页图像

  从文件中读取图像序列,特别是多页图像文件(如 TIFF)

1.imreadmulti​

imreadmulti​(java.lang.String filename, java.util.List mats, int start, int count, int flags)
参数:
filename要加载的文件的地址
mats Mat 对象的列表,用于存储读取的每一页图像
start 指定从文件中的哪一页开始读取
count指定要读取的页数
flags标志,可以是IMREAD_*其一

2.imdecodemulti

  从内存中的缓冲区读取多页图像​

3.haveImageReader

  如果指定的图像可以被OpenCV解码,则返回true

4.imcount

  获取给定文件中的图像数量。

imcount​(java.lang.String filename, int flags)
参数:
filename要加载的文件的地址
flags标志,可以是IMREAD_*其一

三、保存图像

  将图像写入到文件或缓存中

1.保存单页图像

1.imwrite​

imwrite​(java.lang.String filename, Mat img, MatOfInt params)
参数:
filename文件的名称
img要保存的图像
params 特定于格式的参数,以对的形式编码(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)
        Mat imread = Imgcodecs.imread("img.png");
        //质量压缩 80%
        MatOfInt params = new MatOfInt(Imgcodecs.IMWRITE_JPEG_QUALITY,80);
        Imgcodecs.imwrite("param.png",imread,params);

请自行验证压缩后的文件大小

2.imencode

  将图像编码为内存缓冲区中的数据

imencode​(java.lang.String ext, Mat img, MatOfByte buf, MatOfInt params)
参数:
ext定义输出格式的文件扩展名。必须以点开头
img 要写入的图像
buf 调整为适合压缩图像的输出缓冲区
params特定于格式的参数,以对的形式编码(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)
        Mat imread = Imgcodecs.imread("img.png");
        //质量压缩 80%
        MatOfInt params = new MatOfInt(Imgcodecs.IMWRITE_JPEG_QUALITY,80);
        //写入缓存中
        MatOfByte matOfByte = new MatOfByte();
        Imgcodecs.imencode(".png",imread,matOfByte,params);
        System.out.println("matOfByte = " + matOfByte);
        //读取缓存中的数据
        Mat imdecode = Imgcodecs.imdecode(matOfByte, Imgcodecs.IMREAD_COLOR);
        HighGui.imshow("imdecode",imdecode);
        HighGui.waitKey();

请自行验证

2.保存多页图像

1.imwritemulti​

  将多个图像保存到一个多页图像文件中。

imwritemulti​(java.lang.String filename, java.util.List img, MatOfInt params)
参数:
filename要创建的文件的名称
img 一个 Mat 对象的列表,每个 Mat 对象代表一个图像
params 与图像格式相关的参数,例如压缩的类型和质量。这是可选的,具体取决保存的文件格式
        Mat src1 = Imgcodecs.imread("src1.jpg");
        Mat src2 = Imgcodecs.imread("src2.jpg");
        List matList = new ArrayList<>();
        matList.add(src1);
        matList.add(src2);
        Imgcodecs.imwritemulti("ims.tif",matList);

2.haveImageWriter

  如果具有指定文件名的图像可以被OpenCV编码,则返回true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不要喷香水

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值