文章目录

  • 1、图像的读取
  • 函数 `imread()`,用来读取图像:
  • 2、图像的显示
  • 函数 `namedWindow()`,创建窗口,窗口通常用来显示图像:
  • 函数 `imshow()`,用来显示图像:
  • 3、图像的保存
  • 函数 `imwrite()`,用来显示图像:
  • 标志参数设置
  • 示例:

1、图像的读取
函数 imread(),用来读取图像:
Mat cv::imread( const String &filename, int flag=IMREAD_COLOR )

filename:需要读取图像的文件名称(包含图像的地址,名称,扩展名);
flag:标识符,表示读取图像的方式;
	IMREAD_UNCHANGED 或 -1	表示读取原图, 不进行任何改变(默认此种方式读取图像) 
	IMREAD_GRAYSCALE 或 0	按单通道的方式读入图像,即灰度图像
	IMREAD_COLOR 或 1	表示以RGB方式读取图像,函数默认是采用IMREAD_COLOR读取图像,即三通道方式读入图像,即彩色图像
2、图像的显示
函数 namedWindow(),创建窗口,窗口通常用来显示图像:
void cv::namedWindow( const String &winname, int flags=WINDOW_AUTOSIZE )

winname:创建的窗口名,用作窗口的标识符
flags:标识符,设置窗口属性
	WINDOW_AUTOSIZE		在WINDOW_AUTOSIZE模式下,操作窗口的用户不能改变窗口的大小,窗口的大小取决于图像的大小(默认此种方式显示图像);
	WINDOW_NORMAL		在WINDOW_NORMAL模式下,操作窗口的用户可以随意调整窗口大小(不固定窗口的宽高比例),您可对全屏显示的大尺寸图像自由调整到自己觉得适合的大小;
	WINDOW_KEEPRATIO	在WINDOW_KEEPRATIO模式下,可以对窗口进行缩放,但是窗口的宽高比例保持不变;
	WINDOW_OPENGL		在WINDOW_OPENGL模式下,创建的窗口可支持OPENGL;
	WINDOW_FULLSCREEN	在WINDOW_FULLSCREEN模式下,创建的窗口以图像的实际尺寸显示,并且不能进行缩放;
	WINDOW_GUI_EXPANDED	在WINDOW_GUI_EXPANDED模式下,窗口可以添加状态栏和工具栏;
	WINDOW_GUI_NORMAL	在WINDOW_GUI_NORMAL模式下,窗口以正常窗口样式显示;
函数 imshow(),用来显示图像:
void cv::imshow( const String &winname, inputArray mat )

winname:图像显示在哪个窗口里
mat:要显示的图像矩阵
3、图像的保存
函数 imwrite(),用来显示图像:
bool cv::imwrite( const String & filename, InputArray img, const std::vector<int> & params = std::vector<int>() )

filename:需要保存图像的地址和文件名,要保存图片为哪种格式,就带什么后缀JPEG,PNG,PPM,PGM,PBM,TIFF等;
img:将要保存图像的Mat类矩阵变量;
params:设置图像的属性,因为一般情况下保存的图像都是经过压缩的,在这里设置压缩参数,来控制图像的质量(默认保存原质量的图像),params参数是一个vector<int>类型,里面分别存入paramId_1, paramValue_1, paramId_2, paramValue_2, ... 也就是说存入的是一对属性值;
// params参数设置,一对键值对是如何设置的
vector <int> compression_params;
compression_params.push_back(IMWRITE_PNG_COMPRESSION);
compression_params.push_back(9);
imwrite(filename, img, compression_params)
标志参数设置

标志参数

简记

作用

IMWRITE_JPEG_QUALITY

1

保存成JPEG格式的文件的图像质量,分成0~100等级,默认95

IMWRITE_JPEG_PROGRESSIVE

2

增强JPEG格式,启用为1,默认值为0(False)

IMWRITE_JPEG_OPTIMIZE

3

对JPEG格式进行优化,启用为1,默认参数为0(False)

IMWRITE_JPEG_LUMA_QUALITY

5

JPEG格式文件单独的亮度质量等级,分成0~100,默认为0

IMWRITE_PNG_COMPRESSION

16

保存成PNG格式文件压缩级别,从0~9,值越高意味着更小尺寸和更长的压缩时间,默认值为1(最佳速度设置)

IMWRITE_TIFF_COMPRESSION

25

保存成TIFF格式文件压缩方案

示例:
#include <opencv2\opencv.hpp>	// 加载opencv4头文件
#include <iostream>

using namespace cv;		//opencv的命名空间
using namespace std;

int main() {
	// 1、图像的读取 Mat cv::imread( const String &filename, int flag=IMREAD_COLOR )
	// 不加flag参数,默认flag=IMREAD_UNCHANGED,表示读取原图, 不进行任何改变
	Mat img = cv::imread("C:\\cpp\\vs\\opencv\\suzy.jpg");
	// flag=IMREAD_GRAYSCALE,以灰度图方式读取原图
	Mat grayImg = cv::imread("C:\\cpp\\vs\\opencv\\suzy.jpg", IMREAD_GRAYSCALE);
	// flag=IMREAD_COLOR,表示以RGB方式读取图像
	Mat rgbImg = cv::imread("C:\\cpp\\vs\\opencv\\suzy.jpg", IMREAD_GRAYSCALE);

	// 2、创建窗口 void cv::namedWindow( const String &winname, int flags=WINDOW_AUTOSIZE )
	// 不能改变窗口的大小,窗口的大小取决于图像的大小(默认此种方式显示图像)
	namedWindow("img", WINDOW_AUTOSIZE);
	// 可以随意调整窗口大小(不固定窗口的宽高比例)
	namedWindow("grayImg", WINDOW_NORMAL);
	// 可以对窗口进行缩放,但是窗口的宽高比例保持不变
	namedWindow("rgbImg", WINDOW_KEEPRATIO);
	// 显示图像 void cv::imshow( const String &winname, inputArray mat )
	imshow("img", img);
	imshow("grayImg", grayImg);
	imshow("rgbImg", rgbImg);

	// 3、图像的保存 bool cv::imwrite( const String & filename, InputArray img, const std::vector<int> & params = std::vector<int>() )
	vector<int> compression_params;								// 定义一个数组容器,标识压缩图像形式
	compression_params.push_back(IMWRITE_PNG_COMPRESSION);		// 标识我要压缩存储png的形式
	compression_params.push_back(9);							// 压缩等级是 9 
	imwrite("C:\\cpp\\vs\\opencv\\suzy.png", img, compression_params);

	waitKey();
	destroyAllWindows();
	return 0;
}