[C++] opencv - imread函数介绍和使用场景

27 篇文章 1 订阅

一、函数介绍

OpenCV 是一个开源的计算机视觉库,它包含了许多用于图像处理和计算机视觉任务的函数。其中,imread() 函数是 OpenCV 中的一个非常有用的函数,它可以让程序从指定的文件中读取图像数据。

二、函数原型

cv::Mat imread(const String& filename, int flags = IMREAD_COLOR);

其中,filename 参数表示要读取的文件名,flags 参数表示读取图像的方式,默认为 IMREAD_COLOR。

flags参数使用说明:

IMREAD_COLOR

该标志表示以彩色模式读取图像。如果图像是灰度图,则会将其转换为三通道的彩色图像。

IMREAD_GRAYSCALE

该标志表示以灰度模式读取图像。如果图像已经是灰度图,则不会进行任何处理。

IMREAD_UNCHANGED

该标志表示读取图像时保留其原始大小和类型。这对于处理大型图像或具有特殊类型的图像(如浮点型)非常有用。

IMREAD_ANYDEPTH

该标志表示读取图像时保留其原始深度。这对于处理具有不同深度的图像(如浮点型和整型)非常有用。

IMREAD_ANYCOLOR

该标志表示读取图像时保留其原始颜色空间。这对于处理具有不同颜色空间的图像(如RGB和HSV)非常有用。

二、函数使用场景

读取本地图像文件

使用 imread() 函数可以从本地文件系统中读取图像文件。例如,可以使用 imread() 函数来读取一张 JPG 或 PNG 格式的图片:

Mat image = imread("test.jpg");

读取网络图像

有时候,需要从网络上获取图像数据进行处理。这时,可以使用 imread() 函数从网络上读取图像数据。例如,可以使用 imread() 函数从 URL 中读取图像数据:

string url = "http://example.com/image.jpg";
Mat image = imread(url);

读取内存中的图像数据

有时候,需要从内存中读取图像数据进行处理。这时,可以使用 imdecode() 函数将内存中的图像数据解码为 Mat 对象:

vector<uchar> buffer; // 存储图像数据的缓冲区
int width = 640; // 图像宽度
int height = 480; // 图像高度
Mat image = imdecode(buffer, IMREAD_COLOR); // 将缓冲区中的图像数据解码为 Mat 对象

读取彩色图并转换成灰度图

有时候,需要把彩色图像读取成为灰度图:

Mat image = imread("rgb.jpg", IMREAD_GRAYSCALE);

三、完整代码实例

下面是一个完整的代码示例,演示了如何使用 imread() 函数来读取本地图像文件:

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat image = imread("test.jpg");
    if (image.empty()) {
        std::cout << "Could not open or find the image" << std::endl;
        return -1;
    }

    namedWindow("Image", WINDOW_NORMAL);
    imshow("Image", image);
    if (waitKey(0) == 27) { // 如果用户按下 ESC 键,退出循环
        break;
    }

    return 0;
}

四、总结

imread() 函数是 OpenCV 中的一个非常有用的函数,它可以让程序从指定的文件中读取图像数据。在实际开发中,我们经常会用到这个函数来读取本地图像文件或从网络上获取图像数据进行处理。

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

老狼IT工作室

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

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

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

打赏作者

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

抵扣说明:

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

余额充值