Mahotas 教程

Mahotas 主页 Mahotas 简介 Mahotas 计算机视觉 Mahotas 历史 Mahotas 功能 Mahotas 安装和环境配置

Mahotas 处理图像

Mahotas 处理图像 Mahotas 加载图像 Mahotas 将图像加载为灰色 Mahotas 显示图像 Mahotas 显示图像形状 Mahotas 保存图像 Mahotas 图像的质心 Mahotas 图像的卷积 Mahotas 创建 RGB 图像 Mahotas 图像的欧拉数 Mahotas 图像中的零分数 Mahotas 获取图像矩 Mahotas 图像中的局部最大值 Mahotas 图像椭圆轴 Mahotas 图像拉伸 RGB

Mahotas 颜色空间转换

Mahotas 颜色空间转换 Mahotas RGB 到灰度转换 Mahotas RGB 到 LAB 转换 Mahotas RGB 转棕褐色 Mahotas RGB 到 XYZ 转换 Mahotas XYZ 到 LAB 转换 Mahotas XYZ 到 RGB 转换 Mahotas 增加伽马校正 Mahotas 拉伸伽马校正

Mahotas 标记图像函数

Mahotas 标记图像函数 Mahotas 标记图像 Mahotas 过滤区域 Mahotas 边界像素

Mahotas 形态学操作

Mahotas 形态运算符 Mahotas 查找图像平均值 Mahotas 裁剪图像 Mahotas 图像偏心率 Mahotas 叠加图像 Mahotas 图像圆度 Mahotas 调整图像大小 Mahotas 图像直方图 Mahotas 扩大图像 Mahotas 腐蚀图像 Mahotas 分水岭 Mahotas 图像的开运算过程 Mahotas 图像的闭合过程 Mahotas 填补图像中的空洞 Mahotas 条件性膨胀图像 Mahotas 条件腐蚀图像 Mahotas 图像的条件分水岭 Mahotas 图像中的局部最小值 Mahotas 图像的区域最大值 Mahotas 图像的区域最小值

Mahotas 高级概念

Mahotas 图像阈值 Mahotas 设置阈值 Mahotas 软阈值 Mahotas Bernsen 局部阈值 Mahotas 小波变换 Mahotas 制作图像小波中心 Mahotas 距离变换 Mahotas 多边形实用程序 Mahotas 局部二元模式 Mahotas 阈值邻接统计 Mahotas Haralic 特征 Mahotas 标记区域的权重 Mahotas Zernike 特征 Mahotas Zernike 矩 Mahotas 等级过滤器 Mahotas 2D 拉普拉斯过滤器 Mahotas 多数过滤器 Mahotas 均值滤波器 Mahotas 中值滤波器 Mahotas Otsu 方法 Mahotas 高斯滤波 Mahotas 命中与未命中变换 Mahotas 标记最大值数组 Mahotas 图像平均值 Mahotas SURF 密集点 Mahotas SURF 积分 Mahotas Haar 变换 Mahotas 突出显示图像最大值 Mahotas 计算线性二进制模式 Mahotas 获取标签边框 Mahotas 逆 Haar 变换 Mahotas Riddler-Calvard 方法 Mahotas 标记区域的大小 Mahotas 模板匹配 Mahotas 加速稳健特征 Mahotas 移除带边框的标签 Mahotas Daubechies 小波 Mahotas Sobel 边缘检测



Mahotas - 裁剪图像

裁剪图像是指从图像中选择和提取感兴趣的特定区域并丢弃其余部分。它使我们能够专注于图像中的特定区域或对象,同时删除不相关或不需要的部分。

通常,要裁剪图像,您需要定义要保留的区域的坐标或尺寸。

在 Mahotas 中裁剪图像

要使用 Mahotas 裁剪图像,我们可以使用 NumPy 数组切片操作来选择图像的所需区域。我们需要定义所需 ROI 的坐标或尺寸。这可以通过指定要裁剪的区域的起点、宽度和高度来完成。

通过提取和隔离 ROI,我们可以分析、操作或仅显示图像的相关部分。

示例

在下面的示例中,我们将图像裁剪为所需的大小 −

import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
image = mh.imread('sun.png')
cropping= image[50:1250,40:340]
# 创建带有子图的图形
fig, axis = plt.subplots(1, 2, figsize=(10, 5))
# 显示原始图像
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].axis('off')
# 显示裁剪后的图像
axes[1].imshow(cropping, cmap='gray')
axes[1].set_title('Cropped Image')
axes[1].axis('off')
# 调整布局并显示图
plt.tight_layout()
plt.show()

输出

以下是上述代码的输出 −

裁剪图像

裁剪方形区域

要在 mahotas 中裁剪方形区域,我们需要确定起始和结束行和列。以下是计算这些值的方法 −

步骤 1 − 找到图像的最小尺寸。

步骤 2 − 通过从总行数中减去最小尺寸并将结果除以 2 来计算起始行。

步骤 3 − 通过将起始行添加到最小尺寸来计算结束行。

步骤 4 −使用类似方法计算起始列。

步骤 5 − 通过将起始列添加到最小维度来计算结束列。

使用计算出的起始和结束行和列,我们可以从图像中裁剪出正方形区域。我们通过使用适当的行和列范围对图像数组进行索引来实现这一点。

示例

在这里,我们尝试在正方形区域中裁剪图像 −

import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
image = mh.imread('tree.tiff')
# 获取最小维度
size = min(image.shape[:2])
# 计算图像中心
center = tuple(map(lambda x: x // 2, image.shape[:2]))
# 裁剪中心周围的方形区域
crop = image[center[0] - size // 2:center[0] + size // 2, center[1] - size //
2:center[1] + size // 2]
# 创建带有子图的图形
fig, axis = plt.subplots(1, 2, figsize=(10, 5))
# 显示原始图像图像
axes[0].imshow(图像)
axes[0].set_title('原始图像​​')
axes[0].axis('off')
# 显示裁剪后的图像
axes[1].imshow(crop, cmap='gray')
axes[1].set_title('裁剪后的图像')
axes[1].axis('off')
# 调整布局并显示图表
plt.tight_layout()
plt.show()

输出

执行上述代码后,我们得到以下输出 −

裁剪方形区域

裁剪圆形区域

要在 mahotas 中将图像裁剪为圆形区域,我们需要确定圆的中心坐标和半径。

我们可以通过将中心计算为图像尺寸的中点并将半径设置为最小尺寸的一半来实现这一点。

接下来,我们创建一个与图像尺寸相同的布尔掩码,其中 True 值表示圆形区域内的像素。

我们通过计算每个像素与中心的距离并将落在指定半径内的像素设置为 True 来实现这一点。

现在我们有了圆形蒙版,我们可以通过将圆形区域外的值设置为零来将其应用于图像。最后,我们得到裁剪后的图像。

示例

现在,我们尝试在圆形区域内裁剪图像 −

import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
image = mh.imread('sun.png')
# 计算图像中心
center = tuple(map(lambda x: x // 2, image.shape[:2]))
# 将半径计算为最小尺寸的一半
radius = min(image.shape[:2]) // 2
# 创建零的布尔掩码
mask = np.zeros(image.shape[:2], dtype=bool)
# 创建网格索引
y, x = np.ogrid[:image.shape[0], :image.shape[1]]
# 将圆形区域内的掩码值设置为 True
mask[(x - center[0])**2 + (y - center[1])**2 <= radius**2] = True
crop = image.copy()
# 将圆形区域外的数值设置为零
crop[~mask] = 0
# 创建带有子图的图形
fig, axis = plt.subplots(1, 2, figsize=(7, 5))
# 显示原始图像
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].axis('off')
# 显示裁剪后的图像
axes[1].imshow(crop, cmap='gray')
axes[1].set_title('Cropped Image')
axes[1].axis('off')
# 调整布局并显示图
plt.tight_layout()
plt.show()

输出

得到的输出如下所示 −

裁剪圆形区域