python图像处理初步

文章目录

处理流程

在Python中,通过【plt】和【numpy】可以实现图像处理的最简单的流程,即读取图片->处理图片->显示结果->保存结果。

import matplotlib.pyplot as plt
import numpy as np

path = ‘lena.jpg’
img = plt.imread(path).astype(float)/255
blue = img[:,:,2]

fig = plt.figure()
ax = fig.add_subplot(121)
ax.imshow(img)
plt.title(“rgb”)

ax = fig.add_subplot(122)
ax.imshow(blue, cmap=‘Blues’)
plt.title(“blue channel”)

plt.savefig(“test.png”)
plt.show()

其中,imread函数用于读取图片,默认数据类型是8位无符号整型,为了便于后续处理,故而将其转换为float类型。

读取到的lena图是RGB图像,共有三个通道,将其第三个通道,即蓝色通道抽取出来,赋予一个新的变量,此即我们的处理流程。

接下来,显示RGB图像和蓝色通道图像的区别,可通过imshow函数进行绘图。根据数据类型的不同,imshow默认的颜色映射方式不同,对于8位无符号整型,默认0和255为黑色和白色;对于浮点数来说,默认0和1为黑色和白色。由于图像已经转换为浮点数,故除以255,以完成从

[0,255]

[0,1]的映射,从而可以正确显示其色彩。

对于单个通道的图像,则需指明映射方式,即cmap参数,由于我们抽选了蓝色通道,故而将其伪彩映射设为Blues。绘图结果如下

在这里插入图片描述

最后,savefig可将图像存储为文件,由此便完成了图像处理的基本流程。

灰度分布图

单通道图像作为一种矩阵数据,所有适用于矩阵的统计信息,都可用于图像处理。诸如均值、峰值、极差、标准差等均适用于图像数据,此外,灰度直方图也是一个重要的统计特征,通过plt.hist可直接对单个通道进行绘制,这些均与通常的数据处理相似。

有时,我们比较关心图像的灰度值在横向和纵向的分布,尤其是在寻找信号的时候,如下图所示

在这里插入图片描述

这个图像分别按行和按列统计了三个通道的灰度和,根据上面的统计数据可知,在横坐标为80左右的位置,有一个突变,结合图像中的内容可知,这里的确是某个柜子框线。

下面是绘图代码,由于lena图有3个通道,所以在对每行或者每列像素求和时,选择分别对三个通道进行操作。而后在绘制曲线时,对三个通道的值也使用了不同的颜色方案。通过tick_params函数,取消了上图底部和右图左侧的坐标刻度。

xs = [np.sum(img[:,:,i],0) for i in range(3)]
ys = [np.sum(img[:,:,i],1) for i in range(3)]

fig = plt.figure()
gs = fig.add_gridspec(2, 2,
width_ratios=(4, 1),
height_ratios=(1, 4))

ax = fig.add_subplot(gs[1, 0])
ax.imshow(img) # 散点图绘制

xHist = fig.add_subplot(gs[0, 0], sharex=ax)
xHist.tick_params(axis=“x”, labelbottom=False)

yHist = fig.add_subplot(gs[1, 1], sharey=ax)
yHist.tick_params(axis=“y”, labelleft=False)

colors = ‘rgb’
for i in range(3):
xHist.plot(xs[i], color=colors[i])
yHist.plot(ys[i], np.arange(len(ys[i])),color=colors[i])

plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值