Mahotas - 显示图像的形状
处理图像数据时,有些情况下我们需要显示图像的形状。
显示图像的形状是指揭示图像的尺寸和特征,例如其宽度、高度和颜色通道;其中高度对应于行数,宽度对应于列数,通道表示图像中的颜色通道数(例如,RGB 图像为 3)。
在 Mahotas 中显示图像的形状
在 mahotas 中,我们可以使用代表图像的 NumPy 数组的 shape 属性来显示图像的形状。通过访问此属性,我们可以获得图像的尺寸并根据其形状确定要执行的适当操作。
让我们讨论 Mahotas 提供的用于提取和可视化形状信息的不同步骤和功能,以及实际示例。
步骤 1:导入和加载图像
首先,我们需要导入 Mahotas 库并加载我们要分析的图像。安装 Mahotas 后,我们就可以开始进行图像形状分析了。
步骤 2:显示图像的形状
要在 mahotas 中显示图像的形状,我们可以使用 NumPy 数组的 shape 属性。
shape 属性返回一个表示数组维度的整数元组。对于图像,它将提供有关其宽度、高度和通道的信息。
image_shape = image.shape print("Image Shape:", image_shape)
这将以 (height, width, channels) 格式打印已加载图像的形状。
步骤 3:提取单个维度
当我们谈到在 Mahotas 中提取形状的单个维度时,我们指的是获取有关图像大小和颜色成分的特定信息。
简单来说,图像具有不同的属性,例如其高度、宽度和颜色通道数(例如红色、绿色和蓝色)。提取单个维度意味着分别隔离和获取这些特定的信息。
height = image_shape[0] width = image_shape[1] channels = image_shape[2] print("Height:", height) print("Width:", width) print("Channels:", channels)
通过执行此代码,我们将使用索引访问图像的尺寸,其中,
第一个索引对应于高度,
第二个索引对应于宽度
第三个索引对应于通道数。
这将提供图像的各个尺寸。
步骤 4:检查灰度图像
灰度图像是黑白图像,其中每个像素代表该特定点的强度或亮度。它没有任何颜色信息。把它想象成一张黑白照片。
有时,我们会遇到灰度图像,它只有一个通道,而不是彩色图像通常的三个通道(红色、绿色和蓝色)。要确定图像是否为灰度,我们可以检查通道数是否等于 1。
is_grayscale = channels == 1 if is_grayscale: print("The image is grayscale.") else: print("The image is not grayscale.")
通过执行此代码,您将发现加载的图像是否为灰度。根据结果,我们可以进行适当的分析。
步骤 5:在图像上显示形状信息
现在,让我们探索如何在图像本身上显示形状信息。我们可以绘制形状或添加文本叠加以突出显示特定形状特征。这在显示或保存带有注释形状信息的图像时非常有用。
import matplotlib.pyplot as plt # 创建图形和轴 fig, ax = plt.subplots() # 显示图像 ax.imshow(image) # 添加文本以显示形状信息 ax.text(10, 20, f"Shape: {image_shape}", color='white', fontsize=10, bbox=dict(facecolor='black')) # 删除轴刻度 ax.set_xticks([]) ax.set_yticks([]) # 显示图形 plt.show()
当我们执行此代码时,它将显示带有形状信息的图像。形状信息将定位在指定的坐标处,文本将以白色显示在黑色边界框上,使其在图像上更加清晰可见。
完整示例
现在,让我们看一下包含上述所有步骤的完整代码 −
# 安装库 import mahotas as ms import matplotlib.pyplot as mtplt # 加载图像 image = ms.imread('sun.png') # 显示图像的形状 image_shape = image.shape print("Image Shape:", image_shape) # 提取单个维度 height = image_shape[0] width = image_shape[1] channels = image_shape[2] print("Height:", height) print("Width:", width) print("Channels:", channels) # 检查图像是否为灰度 is_grayscale = channels == 1 if is_grayscale: print("The image is grayscale.") else: print("The image is not grayscale.") # 创建图形和轴 fig, ax = mtplt.subplots() # 显示图像 ax.imshow(image) # 添加文本以显示形状信息 ax.text(350, 200, f"Shape: {image_shape}", color='white', fontsize=8, bbox=dict(facecolor='green')) # 删除轴刻度 ax.set_xticks([]) ax.set_yticks([]) # 显示图像 ax.imshow(image) # 添加文本叠加以显示尺寸 text = f"Dimensions: {width}x{height}x{channels}" if not is_grayscale else f"Dimensions: {width}x{height} (Grayscale)" ax.text(18, 100, text, color='red', fontsize=12, fontweight='bold') # 删除轴刻度和标签 ax.axis('off') #显示带有形状信息的图像 mtplt.show()
输出
执行上述代码后,我们得到以下输出 −
Image Shape: (1280, 843, 3) Height: 1280 Width: 843 Channels: 3 The image is not grayscale.
