我正在尝试为图像的边界框(汽车上的紫色蒙版)区域计算热图的平均值。这两个对象都是numpy数组,但我正在努力寻找合适的函数来计算蒙版内部的平均热图值。

python - 如何获得边界框区域内热图的平均值-LMLPHP

我附加了一个最小的工作示例,该示例复制了我要实现的目标:

import numpy as np
mask = np.zeros((10,10))
mask[3:-3, 3:-3] = 1 # white square in black background
im = mask + np.random.randn(10,10) # random image
masked = np.ma.masked_where(mask == 0, mask)
import matplotlib.pyplot as plt
plt.figure()
plt.imshow(im, 'BuGn')
plt.imshow(masked, 'jet',  alpha=0.9)
plt.show()


我想在蓝色正方形(im)内计算masked的平均值。

python - 如何获得边界框区域内热图的平均值-LMLPHP

有人有什么建议吗?

最佳答案

我认为您正在寻找:

#!/usr/bin/env python3

import numpy as np

# Make mask of first 4 diagonal elements
h, w = 6, 10
mask = np.zeros((h,w),dtype=np.uint8)
mask[0][0] = 1
mask[1][1] = 1
mask[2][2] = 1
mask[3][3] = 1

# Make image of random small numbers under 10 that Mark is capable of adding up
# Go for predictable randomness because Mark is not a physicist
np.random.seed(42)
im = np.random.randint(1,10,(h,w),dtype=np.uint8)

# Calculate mean of numbers where mask>0
mean = im[mask>0].mean()


这是面具的外观:

array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)


这是图像的外观:

python - 如何获得边界框区域内热图的平均值-LMLPHP

这是平均值:

In [33]: mean
Out[33]: 5.75


校验:

(7 + 5 + 3 + 8) /4 = 23/4 = 5.75

关于python - 如何获得边界框区域内热图的平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55496765/

10-15 23:32