六、OpenCV中的图像读写

OpenCV图像读写与融合技术

一、基本用法

OpenCV 里的图像读写操作是最常用的功能之一,主要依赖 imread 和 imwrite 这两个函数(以及少量配套函数)。

1.读取图像 imread

cv::Mat image = cv::imread(const std::string& filename, int flags = IMREAD_COLOR);

参数:

  • filename:图像文件路径,可以是 PNG、JPEG、BMP、TIFF 等常见格式。
  • flags:读取模式,常用选项:
    • IMREAD_COLOR(默认):以彩色方式读取,返回 3 通道 BGR。
    • IMREAD_GRAYSCALE:以灰度图方式读取,返回单通道。
    • IMREAD_UNCHANGED:原样读取(包括 Alpha 通道)。
    • IMREAD_ANYDEPTH:读入原始位深(例如 16 位图像不会被强制转成 8 位)。
    • IMREAD_ANYCOLOR:不管图像什么格式,都尽量转成彩色。

示例:

cv::Mat color = cv::imread("image.png");                      // 彩色
cv::Mat gray = cv::imread("image.png", cv::IMREAD_GRAYSCALE); // 灰度
cv::Mat withAlpha = cv::imread("image.png", cv::IMREAD_UNCHANGED); // 包含 Alpha

2.保存图像 imwrite

bool success = cv::imwrite(const std::string& filename, const cv::Mat& image, const std::vector<int>& params = {
   
   });

参数:

  • filename:保存路径,文件扩展名决定编码格式(如 .jpg、.png、.tiff)。
  • image:要保存的 Mat。
  • params:编码参数,不同格式有不同参数。
    • JPEG:IMWRITE_JPEG_QUALITY(默认 95,范围 0–100)。
    • PNG:IMWRITE_PNG_COMPRESSION(0–9,数值越大压缩越强,文件小但耗时更长)。
    • TIFF:支持多页存储(可以传 vector<Mat>)。
    • WebP:IMWRITE_WEBP_QUALITY(0–100)。

示例:

cv::imwrite("gray.jpg", gray);  // 保存为 JPEG(有损)

std::vector<int> params;
params.push_back(cv::IMWRITE_PNG_COMPRESSION);
params.push_back(9);  // 最强压缩
cv::imwrite("alpha.png", withAlpha, params);

3.判断读写是否成功

  • imread 如果失败(文件不存在、路径错误、格式不支持),会返回一个 空 Mat(mat.empty() == true)。
  • imwrite 返回 true/false,保存失败时返回 false 或抛异常。

4.显示图像(配合 imshow)
通常读写图像后会想看效果,可以用:

cv::imshow("window", image);
cv::waitKey(0); // 等待键盘输入,否则窗口一闪而过

5.多页读写(TIFF/多帧图像)
读取多页:

std::vector<cv::Mat> pages;
cv::imreadmulti("test.tif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值