有以下四种图像阵列:
image1 = np.array([
[
# [R G B]
# | | |
[1, 2, 3], [11, 22, 55], [12, 45, 56]
],
[
[1, 2, 3], [56, 55, 13], [12, 45, 56]
],
[
[11, 22, 55], [56, 55, 13], [12, 45, 56]
],
])
image2 = np.array([
[
[91, 72, 33], [111, 222, 155], [212, 245, 156]
],
[
[100, 200, 113], [56, 255, 213], [112, 145, 156]
],
[
[113, 223, 255], [156, 55, 113], [212, 245, 156]
],
])
image3 = np.array([
[
[9, 2, 3], [111, 222, 255], [22, 25, 16]
],
[
[10, 20, 13], [156, 25, 23], [12, 45, 16]
],
[
[13, 23, 155], [56, 255, 13], [222, 235, 216]
],
])
image4 = np.array([
[
[29, 22, 23], [111, 222, 255], [223, 125, 216]
],
[
[210, 220, 13], [156, 252, 232], [122, 145, 216]
],
[
[123, 232, 155], [56, 255, 213], [222, 235, 216]
],
])
对于每一行和每一列,我想计算图像数组的Red & Green & Blue
通道之和的maxRGB
值,并使用max来构建一个新的图像数组
因此,在尝试了以下代码之后,它得到了重复的索引,因为在每行和每列中,三个图像数组的maxRGB
可能是重复的。但我只想得到第一个匹配索引
array = np.array([image1, image2, image3, image4])
array_sum = array.sum(axis=3)
# array_sum_max_index = array_sum.argmax(axis=0)
indices = np.where(array_sum == array_sum.max(axis=0))
print(indices)
输出
(array([1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3]), array([0, 0, 2, 0, 2, 0, 1, 1, 1, 2, 2]), array([0, 2, 0, 1, 2, 1, 0, 1, 2, 1, 2]))
在这个{a1}中有一个类似的答案,但它不能解决我的问题。因此,如何在索引首次匹配时获取索引
编辑:
输入图像的实际数量超过32
。(因此,涉及numpy.choose()
的解决方案可能不起作用)
(提出不使用
numpy.choose()
的替代解决方案,因为OP指出32
选择数组在numpy.choose()
情况下的约束是一个问题)输出:
您可以使用^{} 执行此操作:
它在每个位置为您提供最亮(最高R+G+B)的像素:
结果与
array_sum.max(axis=0)
相同在一行中(基于@fountainhead的回答):
相关问题 更多 >
编程相关推荐