【opencv学习笔记】002之加载图像imread、修改图像cvtColor、显示图像imshow及保存图像imwrite

版权声明:本文由 水亦心 出品,转载请注明出处。 https://blog.csdn.net/shuiyixin/article/details/85240791

目录

一、前言

二、图像基本操作

1、加载图像CV :: imread

2、创建窗口cv::namedWindow

3、显示图像CV :: imshow

4、修改图像 (cv::cvtColor)

5、保存图像 (cv::imwrite)

三、全部代码及结果展示

1、代码

2、运行效果图


一、前言

从今天开始,我会逐步把自己系列类型的博客进行完善,有很多人催我抓紧写数据结构的,写Opencv的,是啊,欠了挺多了,是该给大家继续完善啦。

今天主要给大家分享关于计算机视觉的开源库 OpenCV 的内容,现在人工智能比较火,所以带火了Python,但是编程语言毕竟是编程语言,想要真正从事人工智能,那就要开始想想从哪里入手,计算机视觉事一个不错的选择。

第一个学习笔记是教大家怎么配置:OpenCV配置。今天的就是基础操作了,即图像的操作。我们知道计算机视觉是用摄像头代替人眼睛进行识别,所以计算机视觉最重要的就是操作图像。如果大家想深入了解图像处理,有一本经典之作叫《数字图像处理》,很全面。如果只是希望使用一个OpenCV库,了解一些原理,直接看OpenCV就可以啦。

二、图像基本操作

图像基本操作包括加载,修改,显示,保存。

1、加载图像CV :: imread

1.加载图像是什么?

加载图象就是将图像进行读取,获取图像的信息,并存到一个Mat对象中,方便后续操作。

2.API

加载图像的API是imread,函数原型是:

Mat imread(const String& filename,int flags = IMREAD_COLOR);

函数参数含义如下:

//第一个参数表示图像文件名称,包括图像文件名及路径(相对路径或绝对路径)
//第二个参数,表示加载的图像是什么类型,支持常见的三个参数值:
//    1.IMREAD_UNCHANGED (<0) 表示加载原图,不做任何改变
//    2.IMREAD_GRAYSCALE ( 0)表示把原图作为灰度图像加载进来
//    3.IMREAD_COLOR (>0) 表示把原图作为RGB图像加载进来。

注:一般情况下,我们都默认调用一个参数,后面他默认调用一个参数,即原图加载。

如下面这个例子:

Mat src = imread("E:/image/circle.bmp");

2、创建窗口cv::namedWindow

1.创建窗口是什么?

在显示之前,我们首先需要创建一个窗口,用以显示图像,我们使用的是 namedWindow 这个 API,功能是创建一个OpenCV窗口,它是由OpenCV自动创建与释放,你无需取销毁它。

2.API

创建窗口的API是namedWindow,函数原型是:

namedWindow("Window Title", WINDOW_AUTOSIZE)

函数参数含义如下:

//第一个参数是窗口名称
//第二参数是Mat对象,常见有两种:
//    1.WINDOW_AUTOSIZE:会自动根据图像大小,显示窗口大小,不能人为改变窗口大小 
//    2.WINDOW_NORMAL:跟QT集成的时候会使用,允许修改窗口大小。

注:一般情况下,我们都默认调用一个参数,后面他默认调用一个参数,即原图加载。

如下面这个例子:

namedWindow("input image", CV_WINDOW_AUTOSIZE);

或者这样:

#define INPUT_TITLE "input image"          // 宏定义,原始图片
namedWindow(INPUT_TITLE, CV_WINDOW_AUTOSIZE);

目前这个函数也支持,直接用一来代替后面的参数,我们看一个示例吧!

namedWindow("src1", 1);

 

3、显示图像CV :: imshow

1.显示图像是什么?

显示图像就是将图像在黑窗体展现出来,让我们能够更加直观的看到我们读取到的图像及其处理后的效果。

2.API

显示图像的API是imshow,函数原型是:

imshow 	( const String & winname, InputArray mat ) 	

函数参数含义如下:

//第一个参数表示窗口的名称
//第二个参数,表示要显示的图像

如下面这个例子:

imshow("src1", src1);

4、修改图像 (cv::cvtColor)

1.修改图像是什么?

修改图像就是对图像进行一系列像素操作,把图像从一个彩色空间转换到另外一个色彩空间

2.API

修改图像的API是cvtColor,函数原型是:

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

函数参数含义如下:

//第一个参数,表示输入图像:8位无符号的16位无符号(CV_16uc。…),或者单精确度浮点数。
//第二个参数,表示要输出图像,与输入图像有相同的尺寸和深度。
//第三个参数,表示图像转码方式,比如从三通道的彩图转向单通道的灰度图。
//第四个参数,通道数量的目标图像;如果该参数为0时,信道数代码和从SRC中自动得到。

如下面这个例子:

cvtColor(src1, src2, CV_RGB2GRAY);

5、保存图像 (cv::imwrite)

1.保存图像是什么?

保存图像文件到指定目录路径,但是有要求,只有8位、16位的PNG、JPG、Tiff文件格式而且是单通道或者三通道的BGR的图像才可以通过这种方式保存。而且,保存PNG格式的时候可以保存透明通道的图片。

2.API

保存图像的API是imwrite,函数原型是:

bool cv::imwrite(const String & filename,InputArray img,const std::vector<int> & params = td::vector< int >()) 	

函数参数含义如下:

//第一个参数,表示保存时文件的名称。
//第二个参数,表示要要被保存的图像
//第三个参数,表示特定格式的图像编码。

如下面这个例子:

imwrite("src2.jpg", src2);

这会默认保存到与cpp相同的路径下,如果想指定路径,可以在第一个参数中加上路径,比如保存到D盘中的某个文件夹下:

imwrite("D:/image/src2.jpg", src2);

三、全部代码及结果展示

1、代码

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

void main()
{
	Mat src1, src2;
	src1 = imread("E:/image/hand.jpg");

	namedWindow("src1", 1);
	
	cvtColor(src1, src2, CV_RGB2GRAY);
	
	imshow("src1", src1);
	imshow("src2", src2);
	imwrite("E:/image/src2.jpg", src2);
	waitKey(0);
}

2、运行效果图

原图src1
利用cvtColor处理后的图

 

今天的内容就讲到这里啦,有什么问题,大家可以在下面留言哦!

猜你喜欢

转载自blog.csdn.net/shuiyixin/article/details/85240791