Image部分
英文官方教程链接如下
这一部分我觉得也是相当重要的,尤其是跟计算机视觉打交道的同学可以看一看。因为我没在做计算机视觉相关任务的时候经常需要将一幅图片展示出来,有的时候我们为了指导模型的某一层对图像到底做了什么,我们就可以用这个库。对于我这种初学者而言,matplotlib无疑是最佳选择,用了一段时间觉得还挺好用的,所以推荐给大家。
例如下面一张图片:
一张二维图片我经常将它简单地理解为一个有好多RGB数值的数组。我们可以将他展示一下:
(这里我是用opencv读取的,opencv读取的图像是BGR格式,所以我们要将它转换成RGB格式。或者你也可以用一些其他的函数,例如matplotlib.image.imread,或者Pillow等。我不知道为什么很多人都用opencv,我是跟着我们学长后面学的,所以我也这样用了。)
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import cv2
image = cv2.imread('dumpling.jfif')
#读取图片,我已经将它放到项目路径下,如果不放心的话可以使用绝对路径
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
#将BGR图像转为RGB土图像,不然看着有点怪,说实话,我不明白为什么那么多人都用这个有点怪的函数
# image = mpimg.imread('dumpling.jfif')
img_R = image[:,:,0]
#转完之后的R通道
img_G = image[:,:,1]
img_B = image[:,:,2]
#print(image)
#你可以打印一下,它的形状应该是(1100,1100,3)
#这幅图片就是1100*1100像素,RGB共3通道
channels = [image,img_R,img_G,img_B]
titles = ['ori','R','G','B']
for i in range(4):
plt.subplot(2,2,i+1)
#将画板分为2*2个分区,索引号从1开始,所以i要加上1
plt.imshow(channels[i])
#展示图象
plt.title(titles[i])
#添加标题
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.1, hspace=0.5)
#调整位置,左、下、右、上、左右之间、上下之间
#这个我也没弄得十分明白,我只是多次调整参数并输出,看看合不合适
plt.show()
不要怀疑,通道对应一定没有问题。就是可能不符合我们对颜色的认知。一定要注意的是,用opencv读取图像,图像最好是英文命名,不然可能什么都读不到,但是也不报错,我之前就吃过几次亏。
不过这确实有点怪,如果大家不能接受的话,那我们就用这场的matplotlib.image.imread看看,结果是一样的,其中道理我也没弄清楚,抱歉。
直接打印:
import cv2
image = cv2.imread('dumpling.jfif')
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
print(image)
#以下都是输出结果
[[[255 251 204]
[255 251 204]
[255 251 204]
...
[255 251 204]
[255 251 204]
[255 251 204]]
[[255 251 204]
[255 251 204]
[255 251 204]
...
[255 251 204]
[255 251 204]
[255 251 204]]
[[255 251 204]
[255 251 204]
[255 251 204]
...
[255 251 204]
[255 251 204]
[255 251 204]]
...
[[153 180 163]
[153 180 163]
[153 180 163]
...
[192 226 202]
[192 226 202]
[192 226 202]]
[[153 180 163]
[153 180 163]
[153 180 163]
...
[192 226 202]
[192 226 202]
[192 226 202]]
[[153 180 163]
[153 180 163]
[153 180 163]
...
[192 226 202]
[192 226 202]
[192 226 202]]]
我们随便创建一个数组,也能生成一幅图片,也就是上面的逆过程,这就类似于将卷积处理后的数组(图像)可视化,我捡了一颗简单的例子,大家看看就行。其实不一定要十分明白,但是以后可能会用到。
import matplotlib.pyplot as plt
import numpy as np
image = np.array([[[255,0,255],[255,0,255],[255,0,255]],
[[255,127,255],[255,127,255],[255,127,255]],
[[255,0,255],[255,0,255],[255,0,255]]])
plt.imshow(image)
plt.show()
我运行之后,鼠标停留在了中间区域,所以右下角显示的RGB数值分别为[255,127,255] ,不过不好意思,被水印挡到了。具体的理解可以参照我的numpy数组,我将它们分行列出了,还是比较直观的。
这里难的内容我也弄不清楚,所以我就略去了,想要更进一步的前辈、同辈、晚辈可以自己到官网学习,学会了也可以来指导我一下。