OpenCV图像处理学习一,加载显示修改保存图像相关函数

一.OpenCV加载图像(用cv::imread

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支持JPGPNGTIFF等常见格式图像文件加载,如果图像不能被读取(因为文件丢失、权限不当、不支持或无效格式),函数返回一个空矩阵(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的方向标志旋转图像

二.OpenCV显示图像 (cv::namedWindos cv::imshow)

cv::namedWindos函数

namedWindow(const String & winname, InputArray mat);

参数 winname:指定显示窗体的名称,为String类型

参数 mat:显示图像的Mat对象,为InputArray类型

namedWindos功能是创建一个OpenCV窗口,由OpenCV自动创建与释放,无需考虑获取内存与取销毁它

WINDOW_AUTOSIZE会自动根据图像大小,显示窗口大小,不能人为改变窗口大小

WINDOW_NORMAL跟QT集成的时候会使用,允许修改窗口大小。

cv::imshow函数

 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::Texture2Dcuda::GpuMat作为输入
如果在此函数之前没有创建窗口,则假定它创建了一个带有cv::WINDOW_AUTOSIZE的窗口
如果你需要显示一个比屏幕分辨率大的图像,你需要在imshow之前调用
namedWindow("", WINDOW_NORMAL)

三.修改图像 (cv::cvtColor)

void cv::cvtColor (InputArray src,OutputArray dst,int code,int dstCn = 0 ) 	

cvtColor的功能是把图像从一个彩色空间转换到另外一个色彩空间,有三个参数

第一个参数src: 表示输入图像

第二参数dst: 表示色彩空间转换之后的图像

第三个参数code: 表示图像转码的方式,如:COLOR_BGR2HLS COLOR_BGR2GRAY

第四个参数dstCn:表示通道数量的目标图像;如果该参数为0时,信道数代码和从SRC中自动得到

———————————————————————————————————————————

图像转码的方式

RGB和BGR(opencv默认的彩色图像的颜色空间是BGR)颜色空间的转换
cv::COLOR_BGR2RGB
cv::COLOR_RGB2BGR
cv::COLOR_RGBA2BGRA
cv::COLOR_BGRA2RGBA


向RGB和BGR图像中增添alpha通道
cv::COLOR_RGB2RGBA
cv::COLOR_BGR2BGRA


从RGB和BGR图像中去除alpha通道
cv::COLOR_RGBA2RGB
cv::COLOR_BGRA2BGR


从RBG和BGR颜色空间转换到灰度空间
cv::COLOR_RGB2GRAY
cv::COLOR_BGR2GRAY
cv::COLOR_RGBA2GRAY
cv::COLOR_BGRA2GRAY


从灰度空间转换到RGB和BGR颜色空间
cv::COLOR_GRAY2RGB
cv::COLOR_GRAY2BGR
cv::COLOR_GRAY2RGBA
cv::COLOR_GRAY2BGRA


RGB和BGR颜色空间与BGR565颜色空间之间的转换
cv::COLOR_RGB2BGR565
cv::COLOR_BGR2BGR565
cv::COLOR_BGR5652RGB
cv::COLOR_BGR5652BGR
cv::COLOR_RGBA2BGR565
cv::COLOR_BGRA2BGR565
cv::COLOR_BGR5652RGBA
cv::COLOR_BGR5652BGRA


灰度空间域BGR565之间的转换
cv::COLOR_GRAY2BGR555
cv::COLOR_BGR5552GRAY


8RGB和BGR颜色空间与CIE XYZ之间的转换
cv::COLOR_RGB2XYZ
cv::COLOR_BGR2XYZ
cv::COLOR_XYZ2RGB
cv::COLOR_XYZ2BGR


RGB和BGR颜色空间与uma色度(YCrCb空间)之间的转换
cv::COLOR_RGB2YCrCb
cv::COLOR_BGR2YCrCb
cv::COLOR_YCrCb2RGB
cv::COLOR_YCrCb2BGR


1RGB和BGR颜色空间与HSV颜色空间之间的相互转换
cv::COLOR_RGB2HSV
cv::COLOR_BGR2HSV
cv::COLOR_HSV2RGB
cv::COLOR_HSV2BGR


RGB和BGR颜色空间与HLS颜色空间之间的相互转换
cv::COLOR_RGB2HLS
cv::COLOR_BGR2HLS
cv::COLOR_HLS2RGB
cv::COLOR_HLS2BGR


RGB和BGR颜色空间与CIE Lab颜色空间之间的相互转换
cv::COLOR_RGB2Lab
cv::COLOR_BGR2Lab
cv::COLOR_Lab2RGB
cv::COLOR_Lab2BGR


RGB和BGR颜色空间与CIE Luv颜色空间之间的相互转换
cv::COLOR_RGB2Luv
cv::COLOR_BGR2Luv
cv::COLOR_Luv2RGB
cv::COLOR_Luv2BGR


Bayer格式(raw data)向RGB或BGR颜色空间的转换
cv::COLOR_BayerBG2RGB
cv::COLOR_BayerGB2RGB
cv::COLOR_BayerRG2RGB
cv::COLOR_BayerGR2RGB
cv::COLOR_BayerBG2BGR
cv::COLOR_BayerGB2BGR
cv::COLOR_BayerRG2BGR
cv::COLOR_BayerGR2BGR

———————————————————————————————————————————

四.保存图像(cv::imwrite)

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<opencv2\opencv.hpp>
#include<iostream>
#include<math.h>
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<opencv2\opencv.hpp>
#include<iostream>
#include<math.h>
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);

}

图像效果

猜你喜欢

转载自blog.csdn.net/weixin_44651073/article/details/125812618