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() 函数支持多种文件格式,且该函数是根据图像文件的内容来确定文件格式,而不是根据文件的扩展名来确定。
支持的图像格式:bmp、dib、jpg、jpeg、jpe、png、pbm、pgm、ppm、sr、ras、tiff、tif、exr、jp2。(需要对应的库支持,开发使用的库要编译时添加进去,然后编译生成 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();
}
读取的图片如下所示:

保存的图片如下所示:

参考:

浙公网安备 33010602011771号