飞道的博客

《OpenCv视觉之眼》Python图像处理二 :Opencv图像读取、显示、保存基本函数原型及使用

435人阅读  评论(0)

本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的、不同方法的处理,以达到对图像进行去噪、锐化等一系列的操作。同时,希望观看本专栏的小伙伴可以理解到OpenCv进行图像处理的强大哦,如有转载,请注明出处,感谢各位小伙伴啦!

前文参考:
《OpenCv视觉之眼》Python图像处理一 :Opencv-python的简介及Python环境搭建

上次我们介绍了为什么选择Opnecv-Python作为本次专栏的基本库使用,以及介绍了适用于本专栏的Python环境和IED环境,本次博客,林君学长主要给大家介绍Opnecv两个最基本函数(图像读取和显示)的使用,之后的所有图像处理都将建立在这两个函数使用的方法之上进行处理,有不正确的地方,记得提醒林君学长进行改正啦!

一、图像读取函数cv2.imread()

1、图像读取原理

1)、我们都知道,图像的基本单位为像素,怎么理解像素单位呢?大家其实便可以将像素理解为单元格,一张图片由N*M多个单元格组成,可以简单看成如下所示:

2)、然而这NxM个像素格组成的图像参数,也就是我们生活中常用的多少乘以多少的图像,例如500x500,其中的两个500分别表示这张图片的高和宽,同时,也表明了这张图片由500x500=250000个像素组成。其中,每个单元格,也就是每个像素对应这不同的像素值[0-255,0为黑色,255为白色],不同的像素值表示颜色等级不同,也就是我们常说的越深或者是越淡,如下图所示:

3)、而opencv图像的读取就是利用的以上像素格的原理,通过cv2.imread()函数,遍历出每个像素格和像素格中的值,然后保存到对应维度的数组中进行显示,一般来说,3通道图片对应三维数组,单通道图像对应2维数组,如下所示:左边为3通道对应的三维数组像素[部分],右为单通道对应的二维数组像素值

2、cv2.imread()函数原型

1)、函数原型:img=cv2.imread(filepath,flags)
其中参数的具体介绍如下所示:

  • filepath:图像路径,可以使用绝对或者是相对路径,但一定要包括文件名和后缀,记得用半角引号引住为字符串
  • flags:读取的图片类型,其中类型主要包括:
    cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
    cv2.IMREAD_GRAYSCALE:读入灰度图片
    cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道

提示:图像读取函数原型第二个参数可以省略,默认是完全读取cv2.IMREAD_UNCHANGED,即可写为img=cv2.imread(filepath)
2)、以上函数原型的第二个参数除了通过参数的方式表示,同时还可以通过数字进行表示,其中,数字的具体含义如下所示:

  • flags = -1, 8位深度,原通道
  • flags = 0, 8位深度,1通道
  • flags = 1, 8位深度,3通道
  • flags = 2, 原深度, 1通道
  • flags = 3, 原深度, 3通道

通过对以上函数原型及参数的了解,接下来我们便可以通过不同的参数来确定在实际场合如何进行图像读取函数原型的使用

3、cv2.imread()函数使用

1)、读入一副彩色图片,忽略alpha通道

#导入图像处理库opencv
import cv2
#读取图像
img=cv2.imread("my.jpg",cv2.IMREAD_COLOR)
#打印图像数组
print(img) 


2)、读入灰度图片

#导入图像处理库opencv
import cv2
#读取图像
img=cv2.imread("my.jpg",cv2.IMREAD_GRAYSCALE)
#打印图像数组
print(img) 


其中,将以上cv2.IMREAD_GRAYSCALE参数可换为0,即cv2.imread(“my.jpg”,0)得到的是等价效果
3)、读入完整图片,包括alpha通道

#导入图像处理库opencv
import cv2
#读取图像
img=cv2.imread("my.jpg",cv2.IMREAD_UNCHANGED)
#打印图像数组
print(img) 


将以上cv2.IMREAD_GRAYSCALE参数可换为3,即cv2.imread(“my.jpg”,3)得到的是等价效果

提示:一般来说,在进行图像读取的时候,第二个参数读取彩色图像一般设定为cv2.IMREAD_UNCHANGED或3,而读取灰度图像设定为0,当然,也可以进行图像灰度处理

二、图像显示函数cv2.imshow()

1、图像显示原理

1)、图像显示原理就是获取像素数组img的size,然后设定一张空白图像,依次将像素数组中的单位像素的像素值取出,然后赋值到对应的空白图像进行显示

2、cv2.imshow()函数原型

1)、函数原型:cv2.imshow(Name,img)

  • Name:图像显示框的名字,例如"chenyiyue",注意不要是中文
  • img:图像读取的像素组,显示图像的前提是先进行图像读取

3、cv2.imshow()函数使用

1)、读取图像并显示

#导入图像处理库opencv
import cv2
#读取图像
img=cv2.imread("my.jpg",cv2.IMREAD_UNCHANGED)
#显示图像
cv2.imshow("chen",img)
#等待键值关闭
cv2.waitKey(0)

一般来说,cv2.imshow()需要配合cv2.waitKey(0)使用,因为该图像进行显示是一瞬间,所以需要键值等待函数来固定显示,待键盘输入值或者鼠标点击关闭才能继续执行代码!

2)、cv2.waitkey(a)函数介绍
该函数简单的说是一个界面退出的函数,可根据函数里面的参数来进行判断如何退出界面。

  • a=0:函数则延时无限长,必须有键按下才继续执行
  • a>0:函数返回值为按下的键的ASCII码值,超时则返回-1,同时图像显示a秒,也就是说必须在有窗口显示的情况下,waitKey才有作用,否则无效
  • 其他方式可以查询相关博客进行了解哦!

4、Matplotlib图像显示库

Matplotlib库的安装:pip install matplotlib Matplotlib库的导入:import matplotlib.pyplot as plt
plt.rcParams[‘font.sans-serif’] = [‘SimHei’] #显示中文

1)、一般来说,在进行图像绘制的时候,我们会使用matplotlib库进行图像显示,因为这会直接显示在IED的内部环境,方便我们操作,同时还可以显示中文,具体如下所示:

#导入图像处理库opencv
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #显示中文
#读取图像
img=cv2.imread("my.jpg")
#图像格式转换
img1= cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#BGR转换为RGB显示格式
#显示图像
plt.imshow(img1)
plt.axis('off')#关闭坐标轴  设置为on则表示开启坐标轴
plt.title('陈一月')#图像标题
plt.show()


注意:OpneCv读取的图像格式是BGR格式的,而matplotlib显示图像是以RGB格式进行显示,所以,我们需要对图像进行格式转化,从BGR通道转为RGB通道格式,这样显示出来才不会有色差
2)、BGR格式通过matplotlib显示的色差如下所示:

三、图像保存函数cv2.imwrite()

1、cv2.imwrite()函数原型

1)、图像保存函数原型:cv2.imwrite(filepath,img,num)

  • filepath:保存文件路径,包括文件名和后缀,半角引号扩起来
  • img:读取图像数组,要保存,先读取
  • num:可选参数,可以省略,也可填写,填写方法如下:
    针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95
    对于png ,第三个参数表示的是压缩级别。默认为3.

2、cv2.imwrite()函数使用

1)、读取图像进行保存,然后在读取保存后的图像进行显示

#导入图像处理库opencv
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #显示中文
#读取图像
img=cv2.imread("my.jpg")
#保存图像
cv2.imwrite("1.jpg",img)
#读取保存后的图像
a=cv2.imread("1.jpg")
#图像格式转换
img1= cv2.cvtColor(a,cv2.COLOR_BGR2RGB)#BGR转换为RGB显示格式
#显示图像
plt.imshow(img1)
plt.axis('off')#关闭坐标轴  设置为on则表示开启坐标轴
plt.title('陈一月保存的图像')#图像标题
plt.show()#显示图像


2)、图像保存结果

本次图像处理的基本函数原型原理及使用方法便介绍完成,还是很简单的,希望大一的萌新们能够很快掌握原理并且学会使用方法哦!

以上就是本次博客的全部内容,遇到问题的小伙伴记得留言评论,学长看到会为大家进行解答的,这个学长不太冷!

美感是和听觉、视觉不可分离地结合在一起的,离开听觉、视觉,是不能设想的。当一个人因为厌倦的缘故而失去观赏美的东西的愿望的时候,欣赏那种美的要求也不能不消失。 —— 车尔尼雪夫斯基

陈一月的又一天编程岁月^ _ ^


转载:https://blog.csdn.net/qq_42451251/article/details/107756633
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场