Mat cv::imread(const String & filename, int flags = IMREAD_COLOR);
参数 filename:指定希望读取图像的路径,可以为相对路径和绝对路径
参数 flags:指定读取图像的格式。该值枚举自 cv::ImreadModes,默认值为1。
imread函数功能是加载图像文件成为一个Mat对象
第一个参数表示图像文件的路径名
第二个参数,表示加载的图像是什么类型,支持常见的三个参数值
IMREAD_UNCHANGED (<0) 表示加载原图,不做任何改变
IMREAD_GRAYSCALE ( 0)表示把原图作为灰度图像加载进来
IMREAD_COLOR (>0) 表示把原图作为RGB图像加载进来
注意:OpenCV支持JPG、PNG、TIFF等常见格式图像文件加载,如果图像不能被读取(因为文件丢失、权限不当、不支持或无效格式),函数返回一个空矩阵(Mat::data==NULL)
imread函数第二个参数,图像格式如下:
枚举类型 枚举值 类型描述
IMREAD_UNCHANGED -1 将加载的图像按原样返回,包括alpha通道。会忽略EXIF方向
IMREAD_GRAYSCALE 0 编解码器内部将图像转换为单通道灰度图像返回
IMREAD_COLOR 1 将图像转换为RGB通道排列的彩色图像,该值是函数的默认值
IMREAD_ANYDEPTH 2 如果图像具有深度,则返回对应的16/32位图像。否则转换为8位返回
IMREAD_ANYCOLOR 4 图像以任何可能的颜色读取
IMREAD_LOAD_GDAL 8 使用gdal驱动程序加载图像
IMREAD_REDUCED_GRAYSCALE_2 16 将图像转换为单通道的灰度图像,图像的尺寸缩小为1/2
IMREAD_REDUCED_COLOR_2 17 将图像转换为RGB通道排列的彩色图像,图像尺寸缩小为1/2
IMREAD_REDUCED_GRAYSCALE_4 32 将图像转换为单通道的灰度图像,图像的尺寸缩小为1/4
IMREAD_REDUCED_COLOR_4 33 将图像转换为RGB通道排列的彩色图像,图像尺寸缩小为1/4
IMREAD_REDUCED_GRAYSCALE_8 64 将图像转换为单通道的灰度图像,图像的尺寸缩小为1/8
IMREAD_REDUCED_COLOR_8 65 将图像转换为RGB通道排列的彩色图像,图像尺寸缩小为1/8
IMREAD_IGNORE_ORIENTATION 128 不要根据EXIF的方向标志旋转图像
namedWindow(const String & winname, InputArray mat);
参数 winname:指定显示窗体的名称,为String类型
参数 mat:显示图像的Mat对象,为InputArray类型
namedWindos功能是创建一个OpenCV窗口,由OpenCV自动创建与释放,无需考虑获取内存与取销毁它
WINDOW_AUTOSIZE会自动根据图像大小,显示窗口大小,不能人为改变窗口大小
WINDOW_NORMAL跟QT集成的时候会使用,允许修改窗口大小。
void cv::imshow (const String & winname,InputArray mat);
imshow根据窗口名称显示图像到指定的窗口上去,第一个参数是窗口名称,第二参数是Mat对象
函数imshow在指定的窗口中显示图像。如果窗口是用cv::WINDOW_AUTOSIZE标志创建的,图像将以原始大小显示,但是它仍然受到屏幕分辨率的限制。否则,图像将被缩放以适应窗口。函数可以根据图像的深度对图像进行缩放;
如果图像为8位无符号图像,则显示为原样。
如果图像为16位无符号或32位整数,则像素除以256,将取值范围[0,255*256]映射为[0,255]
如果图像为32位或64位浮点数时,则像素值乘以256,将取值范围[0,1]映射为[0,255]
如果创建的窗口支持OpenGL, cv::imshow也支持ogl::Buffer, ogl::Texture2D和cuda::GpuMat作为输入
如果在此函数之前没有创建窗口,则假定它创建了一个带有cv::WINDOW_AUTOSIZE的窗口
如果你需要显示一个比屏幕分辨率大的图像,你需要在imshow之前调用
namedWindow("", WINDOW_NORMAL)
void cv::cvtColor (InputArray src,OutputArray dst,int code,int dstCn = 0 )
cvtColor的功能是把图像从一个彩色空间转换到另外一个色彩空间,有三个参数
第一个参数src: 表示输入图像
第二参数dst: 表示色彩空间转换之后的图像
第三个参数code: 表示图像转码的方式,如:COLOR_BGR2HLS 、COLOR_BGR2GRAY
第四个参数dstCn:表示通道数量的目标图像;如果该参数为0时,信道数代码和从SRC中自动得到
———————————————————————————————————————————
———————————————————————————————————————————
bool cv::imwrite (const String & filename,
InputArray img,
const std::vector< int > & params = std::vector< int >());
参数 filename:指示文件的名称,包含后缀。写入图像支持的格式与读入支持的格式一致
参数 img:需要保存的图像或图像数组(vector)
参数 params:特定于图像保存格式的参数编码对,参数类型为int 构成的vector,其值枚举自 cv::ImwriteFlags
函数imwrite将img所指代的图像保存到指定的文件中(filename),图像格式是根据文件名扩展名选择的。一般情况下,使用该函数只能保存8位单通道或3通道(通道顺序为BGR)的图像,但有以下几种例外情况:
CV_16U :图片保存格式为 PNG, JPEG 2000 和 TIFF 格式
CV_32F : 图片保存为 PFM, TIFF, OpenEXR, 和 Radiance HDR 格式
CV_32FC3: TIFF图像将使用LogLuv高动态范围编码(每像素4字节)保存
带有alpha通道的PNG图像可以使用此函数保存。为此,创建8位(或16位)4通道的BGRA图像, alpha通道位于最后。完全透明像素的alpha值应该设置为0,完全不透明像素的alpha值应该设置为255/65535
include "stdafx.h"
#include
#include
#include
using namespace cv;
int main(int argc, char **argv)
{
Mat src = imread("F:/photo/a.jpg", -1);
if (src.empty()) //判断是否读写成功
{
printf("could not load image....\n");
return -1;
}
namedWindow("input image", WINDOW_AUTOSIZE);
imshow("input image", src);
}
——————————————————————————————————————————
代码示例
#include "stdafx.h"
#include
#include
#include
using namespace cv;
int main(int argc, char **argv)
{
Mat src = imread("F:/photo/a.jpg", -1);
if (src.empty())
{
printf("could not load image....\n");
return -1;
}
namedWindow("input image", WINDOW_AUTOSIZE);
imshow("input image", src);
Mat cet;
cvtColor(src, cet, COLOR_BGR2GRAY, 0);
imshow("input image", cet);
}