我有两个数据集,尺寸均为 25 x 25。一个数据集是“完整”图像,第二个数据集显示第一个图像中的对象,这意味着对象之外的所有内容都是零。
如何返回第二个数据集中对象所在位置的坐标,以便可以在第一个数据集中找到该对象?
我如何找到对象存在位置的尺寸(numpy 数组中对象的高度和宽度)?
最佳答案
我们将“完整”图像称为 img
和对象标签图像 mask
。我将使用 5 × 5 数组进行说明:
import numpy as np
img = np.random.random((5, 5))
mask = np.array([
[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[1, 1, 1, 1, 1],
[0, 1, 1, 1, 0],
[0, 0, 1, 0, 0],
], dtype=bool)
然后您可以轻松获得掩码中 True
点的面积:它只是总和,因为 True
为 1,False
为 0 :
np.sum(mask)
您可以使用 np.argwhere(mask)
获取 mask
为 True
的坐标,但实际上您可能不需要因为您可以直接使用 mask
索引到 img
。也就是说,您可以从 img
获取数据,其中 mask
为 True
,如下所示:
img[mask]
例如,您可以获取 mask
为 True
的数据点的平均值,如下所示:
np.mean(img[mask])
您可以仅使用屏蔽数据获取img
,让其他一切都为0:
img * mask
或者,如果您更喜欢 nan
作为遮蔽区域:
masked = img.copy()
masked[~mask] = np.nan
最后,您可以获得 mask 区域的[height, width]
,如下所示:
[np.sum(np.max(mask, axis=i)) for i in (1, 0)]
关于python - 如何在numpy中返回图像中区域的坐标及其尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079602/