首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

python图像处理初步

  • 25-02-18 13:41
  • 3802
  • 7785
blog.csdn.net

文章目录

    • 处理流程
    • 灰度分布图

处理流程

在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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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

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

接下来,显示RGB图像和蓝色通道图像的区别,可通过imshow函数进行绘图。根据数据类型的不同,imshow默认的颜色映射方式不同,对于8位无符号整型,默认0和255为黑色和白色;对于浮点数来说,默认0和1为黑色和白色。由于图像已经转换为浮点数,故除以255,以完成从 [ 0 , 255 ] [0,255] [0,255]到 [ 0 , 1 ] [0,1] [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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
注:本文转载自blog.csdn.net的微小冷的文章"https://tinycool.blog.csdn.net/article/details/136299884"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top