内容:
1.图像文件加载imread()
2.窗口与显示imshow()
3.图像文件保存imwrite
1.图像文件加载
- imread函数
默认的BGR彩色图像加载,此外支持灰度图像与任意格式。
(什么是BGR图像?对颜色空间YUV、RGB的理解)
(什么是灰度图像?彩色图像、灰度图像、二值图像)
函数及参数详解:OpenCV之imread解析
- imshow函数
图像显示,不支持透明通道,在显示的时候会改变透明通道的数据,变成普通背景。
想要不改变透明通道的原始数据,应该在输入图像时,加上IMREAD_UNCHANGED参数,以opencv中自带的图片资源opencv-logo.png为例,opencv-logo.png的背景是透明的,直接在linux系统中打开,是这个样子的:
(直接用imshow输出的话是看不出什么差别的,将加和不加参的两种情况的图片用imwrite保存下来再打开,可看出明显差别。)
开始时候,不加IMREAD_UNCHANGED参数:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc,char** argv)
{
// 读入图像
Mat src = imread("/home/bei/Downloads/opencv/samples/data/opencv-logo.png");
if(src.empty())
{
printf("不能找到文件。\n");
return -1;
}
namedWindow("input",WINDOW_AUTOSIZE);
//imshow("input", src);
//保存为opencv-logo1.png
imwrite("../opencv-logo1.png",src);
imshow("input", src);
waitKey(0);
destroyAllWindows();
return 0;
}
打开保存好的opencv-logo1.png:
然后,加上该参数:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc,char** argv)
{
// 读入图像
Mat src = imread("/home/bei/Downloads/opencv/samples/data/opencv-logo.png",IMREAD_UNCHANGED);
if(src.empty())
{
printf("不能找到文件。\n");
return -1;
}
namedWindow("input",WINDOW_AUTOSIZE);
//imshow("input", src);
//保存为opencv-logo1.png
imwrite("../opencv-logo1.png",src);
imshow("input", src);
waitKey(0);
destroyAllWindows();
return 0;
}
打开保存好的opencv-logo1.png:
以上两种情况唯一的区别就是有没有IMREAD_UNCHANGED参数。
其他一些细节:Opencv中的imshow函数详解
- imwrite
图像保存,支持各种格式。
详细介绍:OpenCV笔记1:用imwrite函数来保存图片
总结:
主要是一下参数的用法:
- IMREAD_UNCHANGED:加载四通道
- IMREAD_GRAYSCALE:加载灰度图
- IMREAD_COLOR
- IMREAD_ANYCOLOR