OPenCV高级编程——OpenCV图像读写技术详解

目录

1. 图像读取:imread函数

示例代码

2. 图像显示:imshow函数

示例代码

3. 图像写入:imwrite函数

示例代码

总结


在图像处理与计算机视觉领域,OpenCV(Open Source Computer Vision Library)是一个非常强大的工具库。它提供了丰富的函数接口,用于图像的读取、显示、写入及各种复杂的图像处理任务。本文将详细介绍OpenCV中图像读写的基础技术,包括imreadimshowimwrite函数的使用。

1. 图像读取:imread函数

在OpenCV中,imread函数用于从指定文件路径读取图像。其函数原型如下:

Mat imread(const String& filename, int flags = IMREAD_COLOR);
  • filename:图像文件的路径,可以是相对路径或绝对路径。
  • flags:图像读取的模式,常见的模式包括:
    • IMREAD_COLOR:以彩色模式读取图像(默认),图像数据会被转换为3通道的BGR图像。
    • IMREAD_GRAYSCALE:以灰度模式读取图像,图像数据会被转换为单通道的图像。
    • IMREAD_UNCHANGED:包括alpha通道的加载图像(如果有的话)。
    • IMREAD_ANYDEPTH:如果图像文件是16位或32位深度的,则以其原始深度读取图像,而不是默认的8位。
    • IMREAD_ANYCOLOR:以图像文件本身的颜色格式读取图像。

示例代码

#include <opencv2/opencv.hpp>  
#include <iostream>  
  
int main(int argc, char const* argv[]) {  
    cv::Mat img = cv::imread("test.png", cv::IMREAD_GRAYSCALE);  
    if (img.empty()) {  
        std::cout << "图像读取失败!" << std::endl;  
        return -1;  
    }  
    std::cout << "宽度: " << img.cols << std::endl;  
    std::cout << "高度: " << img.rows << std::endl;  
    std::cout << "通道数: " << img.channels() << std::endl;  
    return 0;  
}

2. 图像显示:imshow函数

imshow函数用于在窗口中显示图像。其函数原型如下:

void imshow(const String& winname, InputArray mat);
  • winname:窗口名称,用于指定图像显示的窗口。
  • mat:需要显示的图像数据。

需要注意的是,imshow函数只支持8位灰度图像、8位彩色图像和32位灰度图像(像素值范围0-1)。为了保持图像显示窗口的打开状态,通常与waitKey函数一起使用。

示例代码

#include <opencv2/opencv.hpp>  
#include <iostream>  
  
int main(int argc, char const* argv[]) {  
    cv::Mat img = cv::imread("test.png", cv::IMREAD_GRAYSCALE);  
    cv::imshow("Hello", img);  
    cv::waitKey(0); // 等待用户按键  
    return 0;  
}

3. 图像写入:imwrite函数

imwrite函数用于将图像写入文件。其函数原型如下:

bool imwrite(const String& filename, InputArray img, const std::vector<int>& params = std::vector<int>());
  • filename:要写入的文件名,包括文件扩展名(如"result.png")。
  • img:Mat类型的图像数据。
  • params:特定格式的保存参数编码,默认为空。

需要注意的是,并非所有格式的Mat类型数据都能被保存为图片。OpenCV主要支持单通道和3通道的图像,且深度为8bit和16bit无符号。

示例代码

#include <opencv2/opencv.hpp>  
#include <iostream>  
  
int main(int argc, char const* argv[]) {  
    cv::Mat img = cv::imread("test.png", cv::IMREAD_GRAYSCALE);  
    cv::imwrite("test_copy.png", img);  
    return 0;  
}

总结

本文介绍了OpenCV中图像读写的三个基础函数:imreadimshowimwrite。通过这些函数,我们可以方便地完成图像的读取、显示和保存操作。掌握这些基础技术是进行更高级图像处理任务的前提。希望本文能帮助读者更好地理解和使用OpenCV进行图像读写。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值