文章目录
- 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;
}
















