【opencv学习笔记】002之加载图像imread、修改图像cvtColor、显示图像imshow及保存图像imwrite ╰半橙微兮° 2021-09-17 10:18 418阅读 0赞 **目录** 一、前言 二、图像基本操作 1、加载图像CV :: imread 2、创建窗口cv::namedWindow 3、显示图像CV :: imshow 4、修改图像 (cv::cvtColor) 5、保存图像 (cv::imwrite) 三、全部代码及结果展示 1、代码 2、运行效果图 -------------------- # 一、前言 # 从今天开始,我会逐步把自己系列类型的博客进行完善,有很多人催我抓紧写数据结构的,写Opencv的,是啊,欠了挺多了,是该给大家继续完善啦。 今天主要给大家分享关于计算机视觉的开源库 OpenCV 的内容,现在人工智能比较火,所以带火了Python,但是编程语言毕竟是编程语言,想要真正从事人工智能,那就要开始想想从哪里入手,计算机视觉事一个不错的选择。 第一个学习笔记是教大家怎么配置:[OpenCV配置][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、运行效果图 ## ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NodWl5aXhpbg_size_26_color_FF2FF2_t_70][] 原图src1 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NodWl5aXhpbg_size_26_color_1FFFF2_t_70][] 利用cvtColor处理后的图 今天的内容就讲到这里啦,有什么问题,大家可以在下面留言哦! [OpenCV]: https://blog.csdn.net/shuiyixin/article/details/80386022 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NodWl5aXhpbg_size_26_color_FF2FF2_t_70]: /images/20210516/c621751096b14319ba72f2fdc1a5eefe.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NodWl5aXhpbg_size_26_color_1FFFF2_t_70]: /images/20210516/871cdb02d78d4ade9f37d67535f25654.png
还没有评论,来说两句吧...