一篇文章搞懂图像的本质是什么

本文介绍了如何使用numpy和matplotlib处理彩色图片,包括图片数据结构的理解,颜色通道的分离与灰度化,以及使用matplotlib显示不同颜色通道的图像。
摘要由CSDN通过智能技术生成

图像是什么?
每个图⽚可以看成数组
在这里插入图片描述

在这里插入图片描述彩⾊图⽚呢?
#pic_center =500x500
在这里插入图片描述计算机眼⾥的颜⾊图⽚
在这里插入图片描述
Numpy读取彩⾊照⽚

在这里插入图片描述
• Shape 三维数组
• ⾼度
• 宽度
• 颜⾊通道
Numpy读取彩⾊照⽚
• 照⽚⼤⼩ 540 x 480
• 540个像素宽度
• 480个像素⾼度
• 3个颜⾊通道
• Numpy shape (480, 540, 3)
• ⾏:480个像素⾼度
• 列:540个像素宽度
• 3个颜⾊通道

在这里插入图片描述计算机并不知道哪⼀个通道
是红⾊,它只知道有三个
表达颜⾊数值的通道

所以我们需要标注通道对应的颜⾊
每⼀个通道本质是等同于⼀张
灰度图

#首先导入numpy
import numpy as np
# 为了在notebook中显示图片,导入matplotlib库
import matplotlib.pyplot as plt

# 加这行在Notebook显示图像
%matplotlib inline
#再使用一个PIL库,用于读取图像
from PIL import Image
#演示
img = Image.open("./img/cat.jpg")
#显示图像
img

在这里插入图片描述

#打印一下变量的类型
type(img)
# 可以看到这个不是numpy的数组格式,那numpy还不能处理它
img_arr = np.asarray(img)
type(img_arr)
# 发现已经变成了numpy数组,现在我们就可以用numpy来处理它了
img_arr.shape
# 可以看到这张照片是1880像素宽,1253像素高,3个颜色通道
# 再使用matplot的imshow()方法显示Numpy数组形式的图片
plt.imshow(img_arr)

在这里插入图片描述

# 可以看到横坐标和纵坐标显示了图片的长度是1800多,高度是1200多
# 我们继续对这个图片操作,先使用numpy的copy方法复制一份原图
img_arr_copy = img_arr.copy()
plt.imshow(img_arr_copy)

在这里插入图片描述

#检查一下大小
img_arr_copy.shape
# 首先使用numpy切片,将R,G,B三个颜色通道中的R红色通道显示出来
plt.imshow(img_arr_copy[:,:,0])

在这里插入图片描述

# 大家会发现这个颜色很奇怪,都是翠绿色,为什么会显示成这样呢?

# 我们打开matplot的官网关于颜色表colormap的说明:
# https://matplotlib.org/stable/gallery/color/colormap_reference.html
# 可以看到默认的颜色:是翠绿色(viridis )。那这个颜色方便色盲观看的
# 我们也可以将cmap颜色设置成火山岩浆样式:magma
plt.imshow(img_arr_copy[:,:,1],cmap="magma")

在这里插入图片描述

# 我们打印一下红色R通道的数组
img_arr_copy[:,:,0]
# 好,我们知道,计算机是分不清到底哪一个通道是红色的,每一个颜色通道其实都是一个灰度图,我们首先将cmap颜色设置为gray灰度
# 看一下
plt.imshow(img_arr_copy[:,:,0],cmap="gray")

在这里插入图片描述

# 类似的,我们将绿色通道也显示为灰度模式
plt.imshow(img_arr_copy[:,:,1],cmap='gray')

在这里插入图片描述

# 那 0呢代表没有绿色或纯黑色,255呢就代表纯绿色
# 可以看到,灰度图上颜色越浅,表示这里越绿
# 再看一下蓝色通道

plt.imshow(img_arr_copy[:,:,2],cmap='gray')

在这里插入图片描述

# 0:没有蓝色或纯黑色,255代表纯蓝色
# 灰度图颜色越浅,表示这里越蓝 ,可以看到这里相比前面红色、绿色的灰度图,这个花瓶是颜色比较浅的,代表颜色接近蓝色
# 当然,我们可以将某个颜色通道颜色全部设为0,我们看一下效果,
# 我这里把绿色通道全部变为0
img_arr_copy[:,:,1] = 0
# 显示一下
plt.imshow(img_arr_copy)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值