OpenCV入门(6):基本操作之图像的读取、显示、保存

在 OpenCV 中,图像的基本操作包括读取、显示和保存图像。这些操作是图像处理的基础。(OpenCV 的图像包含图片和视频。)

一、读取图像

使用 imread 函数读取图像。imread 函数返回的是 Mat 对象,如果读取函数文件失败,会返回一个空矩阵(空矩阵 cv::Mat::data 变量的值是 NULL)。

Mat imread(const string& filename, int flags = 1)
  • filename:图像文件的路径;
  • flag:读取图像的方式,有以下三种情况:
    • flag>0,该函数返回 3 通道图像,如果磁盘上的图像文件是单通道的灰度图像,则会被强制转为 3 通道;
    • flag=0,该函数返回单通道图像,如果磁盘的图像文件是多通道图像,则会被强制转为单通道;
    • flag<0,则函数不对图像进行通道转换。

imread() 函数支持多种文件格式,且该函数是根据图像文件的内容来确定文件格式,而不是根据文件的扩展名来确定。

支持的图像格式:bmpdibjpgjpegjpepngpbmpgmppmsrrastifftifexrjp2。(需要对应的库支持,开发使用的库要编译时添加进去,然后编译生成 OpenCV 库)

示例:

cv::Mat image = cv::imread("./image.jpg", cv::IMREAD_COLOR);

这里使用 3 通道图像的方式,读取 image.jpg" 图片文件。

二、显示图片文件

使用 imshow 函数显示图像。该函数的第一个参数是窗口的名称,第二个参数是要显示的图像。

void imshow(const String& winname, InputArray mat);
  • winname:显示图像窗口的名称;
  • mat:要显示的图像。

示例:

cv::imshow("Display Window", image);
cv::waitKey(0); // 等待按键按下

这里窗口名称设置为 "Display Window",显示上面读取的图片文件容器 image

三、保存图片文件

使用imwrite函数保存图像。

bool imwrite(const string& filename, 
           InputArray image,
           const vector<int>& params=vector<int>())
  • filename:保存文件的路径;
  • image:要保存的图像。

示例:

cv::imwrite("output.jpg", image);

这里将 image 保存成 output.jpg


四、示例

#include "Widget.h"
#include <QApplication>
#include <QMessageBox>

// 添加相关头文件和包
#include <opencv2/highgui/highgui.hpp>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 读取
    cv::Mat image = cv::imread("./demo1.jpg");
    // 判断是否读取成功
    if(image.data == NULL)
    {
        QMessageBox::warning(0, "读取图片失败", "demo1.jpg");
        return -1;
    }
    // 显示
    cv::imshow("readImage", image);
    // 作一个图像行列转换操作,再保存
    image = image.t();
    // 保存
    if(!cv::imwrite("demo2.jpg", image))
    {
        QMessageBox::warning(0, "保存失败", "demo1.jpg");
        return -1;
    }

    return a.exec();
}

读取的图片如下所示:

Blog_OpenCV_Learnl_9.png


保存的图片如下所示:

Blog_OpenCV_Learnl_10.png


参考:

C++ OpenCV 基础操作 | 菜鸟教程


posted @ 2025-07-23 09:15  fengMisaka  阅读(93)  评论(0)    收藏  举报