注解

此笔记本可在此处下载: 00_Basics.ipynb

基础

在本笔记本中,我们介绍了阅读、显示、浏览和保存图像的基本方法。

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from scipy import ndimage
import os
%matplotlib nbagg

您可以在此处下载本示例中使用的图像: rabbit.jpg .如果图像与笔记本本身位于同一目录中,则以下代码将起作用。

首先,让我们检查一下 rabbit.jpg 在当前目录中。

files = os.listdir("./")
if "rabbit.jpg" in files:
    print("Ok, the file is in {0}".format(files))
else:
    print("The file is not in {0} , retry !".format(files))
Ok, the file is in ['rabbit.jpg', '.ipynb_checkpoints', '00_Basics.ipynb']

现在让我们用 python图像库(又称pil)

im = Image.open("rabbit.jpg")
im
../../../_images/00_Basics_5_0.png

数字图像

数字图像主要有两种:

  • 矢量图像 由基本的几何图形组成,如直线和多边形。它们非常有效地存储方案或曲线。它们通常存储为 .svg.pfg.eps 文件夹。在本教程中,我们将不处理此类图像。

  • 栅格图像 ,也称为 位图 其中数据是作为矩阵的结构 像素 .每个像素可以包含1到4个调用的值 渠道 .然后,图像可以按其频道数进行子分类:

    • 单通道图像称为灰度,

    • 大多数彩色图像使用3个通道,一个用于红色(R),一个用于绿色(G),一个用于蓝色(B)。它们被称为RGB图像。

    • 一些图像格式使用第四个通道 阿尔法 对应于给定像素的透明度级别。

在当前图像中,可以得到如下的信道结构:

im.getbands()
('R', 'G', 'B')

从图像到 numpy

现在,可以提取如下信道数据:

R, G, B = im.split()
R = np.array(R)
G = np.array(G)
B = np.array(B)
R
array([[ 78,  85,  96, ...,  79,  70,  64],
       [ 72,  76,  84, ...,  99,  93,  89],
       [ 69,  71,  75, ..., 108, 101,  95],
       ...,
       [120, 115, 101, ...,  73,  64,  38],
       [130, 109,  80, ...,  73,  58,  31],
       [113,  84,  60, ...,  72,  68,  53]], dtype=uint8)
fig = plt.figure()
ax1 = fig.add_subplot(1, 3, 1)
plt.title("R")
plt.imshow(R, cmap = cm.gray)
ax1.axis("off")
ax1 = fig.add_subplot(1, 3, 2)
plt.title("G")
plt.imshow(G, cmap = cm.gray)
ax1.axis("off")
ax1 = fig.add_subplot(1, 3, 3)
plt.title("B")
plt.imshow(B, cmap = cm.gray)
ax1.axis("off")
plt.show()
<IPython.core.display.Javascript object>

numpy 到图像

现在让我们看看如何从numpy创建图像。

r2 = np.arange(256).astype(np.uint8)
g2 = np.arange(256).astype(np.uint8)
R2, G2 = np.meshgrid(r2, g2)
B2 = np.zeros_like(R2).astype(np.uint8)
im2 = Image.fromarray(np.dstack([R2, G2, B2]))
im2
../../../_images/00_Basics_13_0.png

让我们把它应用到兔子图像中。例如,我们可以切换频道:

im3 = Image.fromarray(np.dstack([G, R, B]))
im3
../../../_images/00_Basics_15_0.png