02- OpenCV:加载、修改、保存图像

目录

1、加载图像(cv::imread)

2、显示图像 (cv::namedWindos 与cv::imshow)

3、修改图像 (cv::cvtColor)

4、保存图像(cv::imwrite)

5、代码演示


1、加载图像(cv::imread)

cv::imread 是 OpenCV 库中用于读取图像文件的函数,加载图像文件成为一个Mat对象。

它的原型如下:

cpp 复制代码
using namespace cv;//写上这个命名空间,下面可以省cv::

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

参数说明:

  • filename:要读取的图像文件的路径和名称。
  • flags:可选参数,指定图像读取的方式,默认为 cv::IMREAD_COLOR。可以使用以下标志之一:
    • cv::IMREAD_COLOR:(>0) 以彩色图像RGB格式读取图像(默认值)。
    • cv::IMREAD_GRAYSCALE:( 0) 以灰度图像格式读取图像。
    • cv::IMREAD_UNCHANGED:(<0) 以原始图像格式读取图像,包括 alpha 通道。

返回值:

  • 如果成功读取图像文件,则返回一个 cv::Mat 对象,该对象表示读取到的图像数据。
  • 如果无法读取图像文件或文件路径错误,则返回一个空的 cv::Mat 对象。

注意:OpenCV支持JPG、PNG、TIFF等常见格式图像文件加载

2、显示图像 (cv::namedWindos 与cv::imshow)
cpp 复制代码
using namespace cv;

//函数用于创建一个窗口来显示图像
void namedWindow(const std::string& winname, int flags = WINDOW_AUTOSIZE);

//函数用于在指定的窗口中显示图像
void imshow(const std::string& winname, const Mat& img);

参数说明:

  • winname:窗口名称,用于标识不同的窗口。
  • flags:可选参数,指定窗口的行为,默认为 cv::WINDOW_AUTOSIZE,表示窗口大小自动调整以适应图像大小。

(1)namedWindos功能是创建一个OpenCV窗口,它是由OpenCV自动创建与释放,你无需取销毁它。

(2)常见用法namedWindow("Window Title", WINDOW_AUTOSIZE)

(3)WINDOW_AUTOSIZE会自动根据图像大小,显示窗口大小,不能人为改变窗口大小 WINDOW_NORMAL,跟QT集成的时候会使用,允许修改窗口大小。

3、修改图像 (cv::cvtColor)

cv::cvtColor:改变其颜色、空间,从一个色彩空间转换到另一个色彩空间。

原型如下:

cpp 复制代码
using namespace cv;

void cvtColor(const Mat& src, Mat& dst, int code, int dstCn = 0);

参数说明:

  • src:源图像,即要进行颜色空间转换的图像。
  • dst:目标图像,用于存储转换后的图像。
  • code:指定颜色空间转换的类型,例如 cv::COLOR_BGR2GRAY 表示将 BGR 彩色图像转换为灰度图像、COLOR_BGR2HLS;
  • dstCn:可选参数,指定目标图像的通道数,默认为 0,表示与源图像通道数相同。
4、保存图像(cv::imwrite)

cv::imwrite 函数用于将图像保存到文件中。

cpp 复制代码
using namespace cv;
using namespace std;

bool imwrite(const string& filename, const Mat& img, const vector<int>& params = vector<int>());

参数说明:

  • filename:要保存的图像文件的路径和名称。
  • img:要保存的图像。
  • params:可选参数,用于指定保存图像的压缩参数。

返回值:

  • 如果成功保存图像,则返回 true。
  • 如果保存失败,则返回 false。

(1)只有8位、16位的PNG、JPG、Tiff文件格式,而且是单通道或者三通道的BGR的图像才可以通过这种方式保存

(2)保存PNG格式的时候可以保存透明通道的图片

(3)可以指定压缩参数

5、代码演示
cpp 复制代码
#include<opencv2\opencv.hpp>
#include<iostream>

using namespace cv;
int main(int argc, char** argv)
{
	// 加载图像
	Mat src = imread("test.jpg");
	if (src.empty())
	{
		printf("could not load image...\n");
		return -1;
	}

	// 创建窗口
	namedWindow("test opencv setup", CV_WINDOW_AUTOSIZE);

	// 显示图像
	imshow("test opencv setup", src);


	// 创建窗口
	namedWindow("output windows", CV_WINDOW_AUTOSIZE);
	Mat output_image;
	// 修改图像
	//cvtColor(src, output_image, CV_BGR2GRAY);
	cvtColor(src, output_image, CV_BGR2HLS);
	// 显示图像
	imshow("output windows", output_image);

	// 保存图像
	//imwrite("output_image.png", output_image);
	imwrite("output_image.tif", output_image);

	// 等待按键
	waitKey(0);

	// 关闭窗口
	destroyAllWindows();

	return 0;
}
相关推荐
段一凡-华北理工大学3 分钟前
高炉炼铁机器视觉与智能识别十八讲~系列文章15:可靠性篇:防误报、容错与识别系统的鲁棒性设计
人工智能·算法·机器学习·高炉大模型·高炉机器视觉·高炉炼铁模型开发
posstos6 分钟前
用 MiniMax-H3 做 AI 短剧:一个 SKILL 把剧本自动拆成六段式提示词
人工智能·aigc·ai视频·提示词工程·minimax·ai短剧·分镜脚本
昇腾CANN7 分钟前
CANNBot PyPTO 算子编程智能体的使用,从一段 Prompt 开始
人工智能·开源·昇腾·cann·cann开源
xiaoyunxuexibiji17 分钟前
企业电子招投标如何实现全流程线上管理?从招标立项到评标定标
大数据·人工智能
西木莉32 分钟前
AI时代中小企业如何落地数据治理?
人工智能
汇像AI无人实验室32 分钟前
植物合成生物学迎来爆发期:如何用自动化重塑基因元件筛选?
大数据·人工智能·自动化
xwz小王子40 分钟前
Nature Machine Intelligence|微型机器人强化学习训练缩短至分钟级:每秒19万次交互
人工智能·机器人
某林21241 分钟前
局部路径规划器 DWB:速度采样与评分权重的取值分析
人工智能·算法·架构·机器人·技术复盘
AI职业加油站43 分钟前
模数共振行动解读|大模型应用工程师证书,匹配行业 RAG/Agent 落地人才需求
人工智能·学习·算法·职场和发展·职场发展