点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

使用Python进行图像处理是理解如何通过数学和代码表示图片的有趣方法,希望这篇文章能让您了解计算机是如何理解图像数据的。

让我们从导入需要的库开始吧!

# First import the required Python Libraries
import numpy as np
import matplotlib.pyplot as plt
from skimage import img_as_uint
from skimage.io import imshow, imread
from skimage.color import rgb2hsv
from skimage.color import rgb2gray

一个图像可以被认为是一个矩阵,其中每个像素的颜色是由一个尺度上的数字表示。

array_1 = np.array([[255, 0], [0, 255]])
imshow(array_1, cmap = 'gray');

上面的输出是我们刚刚创建的矩阵的直观表示。注意,我们不限于简单的2x2矩阵。以下是3x3矩阵的示例。

array_2 = np.array([[255, 0, 255], [0, 255, 0],[255, 0, 255]])
imshow(array_2, cmap = 'gray');

我们的示例选择的是光谱中最极端的颜色,但我们也可以访问介于两者之间的任何颜色。

array_spectrum = np.array([np.arange(0,255,17), np.arange(255,0,-17),np.arange(0,255,17),np.arange(255,0,-17)])
fig, ax = plt.subplots(1, 2, figsize=(12,4))
ax[0].imshow(array_spectrum, cmap = 'gray')
ax[0].set_title('Arange Generation')
ax[1].imshow(array_spectrum.T, cmap = 'gray')
ax[1].set_title('Transpose Generation');

下面的图像是使用NumPy的arange函数构造的,并通过获取第一个图像的转置来创建了另一个图像。

为了简单起见,我们一直使用灰度,但请记住,计算机实际上理解的颜色是红色,绿色和蓝色的组合。因此,我们可以将图像表示为三维矩阵。每个像素被表示为一个Python列表,用于指定它们的颜色组合。

array_colors = np.array([[[255, 0, 0], [0, 255, 0],[0, 0, 255]]])
imshow(array_colors);

让我们尝试处理真实图像,下面是一只可爱的小狗的图片。

doggo = imread('doggo.png')
imshow(doggo);

doggo.shape

检查图像的大小,我们看到它是一个390x385x3矩阵。使用Python我们可以对这个矩阵进行切片,并将每个部分表示为它自己的图像。

fig, ax = plt.subplots(1, 3, figsize=(6,4), sharey= True)ax[0].imshow(doggo[:, 0:130])
ax[0].set_title('First Split')ax[1].imshow(doggo[:, 130:260])
ax[1].set_title('Second Split')ax[2].imshow(doggo[:, 260:390])
ax[2].set_title('Third Split');

而且我们也可以显示图像的任意部分,下面就是小狗的脸部显示。

imshow(doggo[95:250, 130:275]);

现在让我们做点有意思的事情~

前面我们说过,一个图像可以由一个三维矩阵表示,因此我们可以通过以下操作,将图像分解成红色、绿色和蓝色来分别显示。

fig, ax = plt.subplots(1, 3, figsize=(12,4), sharey = True)
ax[0].imshow(doggo[:,:,0], cmap='Reds')
ax[0].set_title('Red')
ax[1].imshow(doggo[:,:,1], cmap='Greens')
ax[1].set_title('Green')
ax[2].imshow(doggo[:,:,2], cmap='Blues')
ax[2].set_title('Blue');

此外,我们可以将图像从RGB(红,绿,蓝)转换为HSV(色相,饱和度,值)。

doggo_hsv = rgb2hsv(doggo)
fig, ax = plt.subplots(1, 3, figsize=(12,4), sharey = True)
ax[0].imshow(doggo_hsv[:,:,0], cmap='hsv')
ax[0].set_title('Hue')
ax[1].imshow(doggo_hsv[:,:,1], cmap='gray')
ax[1].set_title('Saturation')
ax[2].imshow(doggo_hsv[:,:,2], cmap='gray')
ax[2].set_title('Value');

最后,我们还可以将图像矩阵转换为灰度。通过将图像转换为简单的二维矩阵,这使我们能够轻松地根据每个像素与指定值的关系来过滤图像。

doggo_gray = rgb2gray(doggo)
fig, ax = plt.subplots(1, 5, figsize=(17,6), sharey = True)
ax[0].imshow(doggo_gray, cmap = 'gray')
ax[0].set_title('Grayscale Original')
ax[1].imshow(img_as_uint(doggo_gray > 0.25), cmap = 'gray')
ax[1].set_title('Greater than 0.25')
ax[2].imshow(img_as_uint(doggo_gray > 0.50), cmap = 'gray')
ax[2].set_title('Greater than 0.50');
ax[3].imshow(img_as_uint(doggo_gray > 0.75), cmap = 'gray')
ax[3].set_title('Greater than 0.75');
ax[4].imshow(img_as_uint(doggo_gray > np.mean(doggo_gray)), cmap = 'gray')
ax[4].set_title('Greater than Mean');

通过本文我们了解了如何使用Python加载和操作图像。为了更好地理解图像在Python中的显示,最好的办法就是动手复现一下上述代码。

使用Python进行图像处理是理解如何通过数学和代码表示图片的有趣方法,希望这篇文章能让您了解计算机是如何理解图像数据的。

让我们从导入需要的库开始吧!

# First import the required Python Libraries
import numpy as np
import matplotlib.pyplot as plt
from skimage import img_as_uint
from skimage.io import imshow, imread
from skimage.color import rgb2hsv
from skimage.color import rgb2gray

一个图像可以被认为是一个矩阵,其中每个像素的颜色是由一个尺度上的数字表示。

array_1 = np.array([[255, 0], [0, 255]])
imshow(array_1, cmap = 'gray');

上面的输出是我们刚刚创建的矩阵的直观表示。注意,我们不限于简单的2x2矩阵。以下是3x3矩阵的示例。

array_2 = np.array([[255, 0, 255], [0, 255, 0],[255, 0, 255]])
imshow(array_2, cmap = 'gray');

我们的示例选择的是光谱中最极端的颜色,但我们也可以访问介于两者之间的任何颜色。

array_spectrum = np.array([np.arange(0,255,17), np.arange(255,0,-17),np.arange(0,255,17),np.arange(255,0,-17)])
fig, ax = plt.subplots(1, 2, figsize=(12,4))
ax[0].imshow(array_spectrum, cmap = 'gray')
ax[0].set_title('Arange Generation')
ax[1].imshow(array_spectrum.T, cmap = 'gray')
ax[1].set_title('Transpose Generation');

下面的图像是使用NumPy的arange函数构造的,并通过获取第一个图像的转置来创建了另一个图像。

为了简单起见,我们一直使用灰度,但请记住,计算机实际上理解的颜色是红色,绿色和蓝色的组合。因此,我们可以将图像表示为三维矩阵。每个像素被表示为一个Python列表,用于指定它们的颜色组合。

array_colors = np.array([[[255, 0, 0], [0, 255, 0],[0, 0, 255]]])
imshow(array_colors);

让我们尝试处理真实图像,下面是一只可爱的小狗的图片。

doggo = imread('doggo.png')
imshow(doggo);

doggo.shape

检查图像的大小,我们看到它是一个390x385x3矩阵。使用Python我们可以对这个矩阵进行切片,并将每个部分表示为它自己的图像。

fig, ax = plt.subplots(1, 3, figsize=(6,4), sharey= True)ax[0].imshow(doggo[:, 0:130])
ax[0].set_title('First Split')ax[1].imshow(doggo[:, 130:260])
ax[1].set_title('Second Split')ax[2].imshow(doggo[:, 260:390])
ax[2].set_title('Third Split');

而且我们也可以显示图像的任意部分,下面就是小狗的脸部显示。

imshow(doggo[95:250, 130:275]);

现在让我们做点有意思的事情~

前面我们说过,一个图像可以由一个三维矩阵表示,因此我们可以通过以下操作,将图像分解成红色、绿色和蓝色来分别显示。

fig, ax = plt.subplots(1, 3, figsize=(12,4), sharey = True)
ax[0].imshow(doggo[:,:,0], cmap='Reds')
ax[0].set_title('Red')
ax[1].imshow(doggo[:,:,1], cmap='Greens')
ax[1].set_title('Green')
ax[2].imshow(doggo[:,:,2], cmap='Blues')
ax[2].set_title('Blue');

此外,我们可以将图像从RGB(红,绿,蓝)转换为HSV(色相,饱和度,值)。

doggo_hsv = rgb2hsv(doggo)
fig, ax = plt.subplots(1, 3, figsize=(12,4), sharey = True)
ax[0].imshow(doggo_hsv[:,:,0], cmap='hsv')
ax[0].set_title('Hue')
ax[1].imshow(doggo_hsv[:,:,1], cmap='gray')
ax[1].set_title('Saturation')
ax[2].imshow(doggo_hsv[:,:,2], cmap='gray')
ax[2].set_title('Value');

最后,我们还可以将图像矩阵转换为灰度。通过将图像转换为简单的二维矩阵,这使我们能够轻松地根据每个像素与指定值的关系来过滤图像。

doggo_gray = rgb2gray(doggo)
fig, ax = plt.subplots(1, 5, figsize=(17,6), sharey = True)
ax[0].imshow(doggo_gray, cmap = 'gray')
ax[0].set_title('Grayscale Original')
ax[1].imshow(img_as_uint(doggo_gray > 0.25), cmap = 'gray')
ax[1].set_title('Greater than 0.25')
ax[2].imshow(img_as_uint(doggo_gray > 0.50), cmap = 'gray')
ax[2].set_title('Greater than 0.50');
ax[3].imshow(img_as_uint(doggo_gray > 0.75), cmap = 'gray')
ax[3].set_title('Greater than 0.75');
ax[4].imshow(img_as_uint(doggo_gray > np.mean(doggo_gray)), cmap = 'gray')
ax[4].set_title('Greater than Mean');

通过本文我们了解了如何使用Python加载和操作图像。为了更好地理解图像在Python中的显示,最好的办法就是动手复现一下上述代码。

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目31讲

在「小白学视觉」公众号后台回复:Python视觉实战项目31讲即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

下载4:leetcode算法开源书

在「小白学视觉」公众号后台回复:leetcode即可下载。每题都 runtime beats 100% 的开源好书,你值得拥有!


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

Python图像处理介绍--Python中的图像表示相关推荐

  1. python基础教程:Python图像处理库PIL中图像格式转换的实现

    这篇文章主要介绍了Python图像处理库PIL中图像格式转换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 在数字图像处理 ...

  2. Python图像处理库PIL中图像格式转换(一)

    参考:https://blog.csdn.net/icamera0/article/details/50843172 在数字图像处理中,针对不同的图像格式有其特定的处理算法.所以,在做图像处理之前,我 ...

  3. python软件介绍-python软件界面介绍(python软件介绍)

    python软件界面介绍 1.接口初始化 当我们使用pycharm工具时,我们将遇到的第一个问题是,在进行各种配置后界面变得混乱时,我们该怎么办?我们应该还原,那么如何还原初始设置? 尽管此工具是从e ...

  4. Python图像处理库PIL中图像格式转换

    在数字图像处理中,针对不同的图像格式有其特定的处理算法.所以,在做图像处理之前,我们需要考虑清楚自己要基于哪种格式的图像进行算法设计及其实现.本文基于这个需求,使用python中的图像处理库PIL来实 ...

  5. Python图像处理库PIL中的convert函数的用法

    在数字图像处理中,针对不同的图像格式有其特定的处理算法.所以,在做图像处理之前,我们需要考虑清楚自己要基于哪种格式的图像进行算法设计及其实现.本文基于这个需求,使用python中的图像处理库PIL来实 ...

  6. Python图像处理丨带你认识图像量化处理及局部马赛克特效

    摘要:本文主要讲述如何进行图像量化处理和采样处理及局部马赛克特效. 本文分享自华为云社区<[Python图像处理] 二十.图像量化处理和采样处理及局部马赛克特效>,作者: eastmoun ...

  7. python图像处理:凸透镜效果/鱼眼图像

    图像处理:凸透镜效果/鱼眼图像 原理 效果 应用 代码 原理 原理很简单,经过凸透镜放大的区域可以看成一个圆形区域,这个圆形区域是由原始图像一个很小的圆形区域扩展而来. 效果 应用 python图像处 ...

  8. Python图像处理丨带你掌握图像几何变换

    摘要:本篇文章主要讲解图像仿射变换和图像透视变换,通过Python调用OpenCV函数实. 本文分享自华为云社区<[Python图像处理] 十二.图像几何变换之图像仿射变换.图像透视变换和图像校 ...

  9. python画矢量场_Python中的图像渐变矢量场

    我试图使用 Python获取 Gradient Vector Field的图像(类似于 this matlab question). 这是原始图片: 这是我的代码: import numpy as n ...

最新文章

  1. windows下opencv安装及配置(vs2010环境)
  2. PICRUSt:16S预测宏基因组-扩增子分析锦上添花
  3. ICS汇编学习笔记——8086的指令系统
  4. 数据库设计与开发概述
  5. 手写自己的MyBatis框架-MapperProxy
  6. mysql2005卸载步骤,二次安装mysql步骤
  7. 转行进入测试一年有感
  8. GridView中使用CheckBox
  9. 二代征信|番茄风控全网最全
  10. go url 参数编码和解码
  11. 图:用PPT为湖北黄石某电视台及其有线电视定制的知识竞赛题库
  12. Windows Azure AppFabric (一) 平台简介
  13. 程序员如何财务自由【原创】
  14. pdf、markdown、docx文件预览
  15. c语言中指数对数函数,在C语言中使用对数函数的方法
  16. 实验吧唯快不破writeup
  17. 关于三方支付做的一个小总结,后期不断完善更新
  18. 【转】现学现用WPS,小技巧大帮助
  19. w10电脑c盘满了怎么清理_w10电脑自动更新安装完c盘满了怎么清理
  20. matlab仿真单关节机器人,用MATLAB玩转机器人--第六章 用MATLAB玩转单关节机器人

热门文章

  1. AI一分钟 | 厉害了!英特尔正式发布电动飞行汽车;贝佐斯笑了,多家PC厂商结盟亚马逊Alexa,直怼微软Cortana
  2. 观点 | 哈哈,TensorFlow被吐槽了吧
  3. 三流Java搞技术,二流Java搞框架,一流Java…
  4. Mybatis-plus常用API全套教程,看完没有不懂的
  5. 国产的markdown 语法的思维导图和大纲工具!
  6. 优雅地处理重复请求(并发请求)——附Java实现
  7. 为什么像王者荣耀这样的游戏 Server 不愿意使用微服务?
  8. SpringBoot配置文件放在jar外部
  9. 2021 OceanBase 数据库大赛来了!
  10. 宗成庆:如何撰写毕业论文?