Scikit 图像 - Numpy 图像
NumPy(也称为"Numerical Python")是 Python 中用于数值计算的最关键的基础包之一。NumPy 的核心数据结构是 ndarray(N 维数组),它是相同数据类型元素的同质集合。这些数组可以是任何维度,例如 1D、2D 甚至更高维度的数组。NumPy 提供了大量数学函数来有效地操作这些 N 维数组。
scikit-image 中的图像表示为 NumPy ndarray(多维数组)。scikit-image 库建立在 NumPy 之上,它使用 NumPy 数组来表示图像。因此,scikit-image 库可以有效地执行各种图像处理任务。
将图像表示为 NumPy 数组
将图像表示为 NumPy 数组,提供了一种方便有效的方法来存储和操作图像数据。
这里,NumPy 数组的维度对应于图像维度,例如高度、宽度和颜色通道。对于灰度图像,数组通常是二维的(高度 x 宽度)。对于彩色图像,数组是三维的(高 x 宽 x 3),其中最后一个维度代表红色、绿色和蓝色通道。
示例 1
以下示例演示了如何在 scikit-image 中将彩色图像表示为 NumPy 数组。
from skimage import io # 将图像读取为灰度图像 img_array = io.imread('Images/Dog.jpg') # 从图像数组显示图像属性 print('以下是加载图像的属性:') print("图像对象的数据类型:", type(img_array)) print("图像形状:", img_array.shape) print("图像数据类型:", img_array.dtype)
输入图像

输出
以下是加载的图像的属性: 图像对象的数据类型:<class 'numpy.ndarray'> 图像形状:(479, 500, 3) 图像数据类型:uint8
示例 2
让我们看看灰度图像的 NumPy 数组表示。
from skimage import io # 将图像读取为灰度图像 img_array = io.imread('Images/dog.jpg', as_gray=True) # 从图像数组显示图像属性 print('以下是加载图像的属性:') print("图像对象的数据类型:", type(img_array)) print("图像形状:", img_array.shape) print("图像数据类型:", img_array.dtype)
输出
以下是加载的图像的属性: 图像对象的数据类型:<class 'numpy.ndarray'> 图像形状:(479, 500) 图像数据类型:float64
索引和切片
NumPy 的索引和切片功能可用于访问和操作图像数据。使用 NumPy 灵活的索引和切片语法可以裁剪图像、选择特定颜色通道或对图像内的特定区域应用操作。
示例
以下示例演示了如何使用 NumPy 的索引和切片语法修改 Scikit-image 中的图像。
from skimage import io # 将图像读取为灰度图像 img_array = io.imread('Images/Tajmahal.jpg') # 获取第 10 行第 20 列像素的值 pixel_value = img_array[10, 20] print('图像数组第 10 行第 20 列的像素', pixel_value) # 将值 0 设置为第 3 行第 10 列的像素 img_array[3, 10] = 0 # 在图像中选择一个区域 roi = img_array[100:200, 200:300] # 将所选区域中的像素值设置为红色 (255, 0, 0) roi[:] = (255, 0, 0) # 显示修改后的图像图像 io.imshow(img_array) io.show()
输入图像

输出
运行上述代码将得到以下结果 −
图像数组第 10 行第 20 列的像素 [ 81 97 110]
此外,它还生成以下图像 −
