Изменение поведения функции для вычисления среднего числа множественных массивов - PullRequest
2 голосов
/ 27 сентября 2019

У меня есть три значения цвета BGR (хранятся в числовых массивах), и я хочу вычислить их среднее значение (для каждого элемента, чтобы получить массив пустышек, который выглядит следующим образом: [meanB, meanG, meanR]).

Это довольно простая задача, и я нашел способ сделать это:

import numpy as np

bgr1 = np.array([6, 149, 254])
bgr2 = np.array([5, 146, 251])
bgr3 = np.array([5, 149, 251])

bgr_mean = ((bgr1 + bgr2 + bgr3) / 3).astype(int)

print(bgr_mean)

с выводом, как и ожидалось:

[5 148 252]

Моя проблема в том, что когда я реализую это в своем коде, он не дает того же результата вообще, несмотря на то, что значение и тип каждого элемента одинаковы.Этот код:

bgr1 = button_image[0][x]
print("bgr1 = " + str(bgr1))
print(type(bgr1))

bgr2 = button_image[0][x-1]
print("bgr2 = " + str(bgr2))

bgr3 = button_image[1][x+1]
print("bgr3 = " + str(bgr3))

bgr_mean = ((bgr1 + bgr2 + bgr3) / 3).astype(int)
print("bgr_mean = " + str(bgr_mean))

вывод:

bgr1 = [6 149 254]

класс 'numpy.ndarray'

bgr2 =[5 146 251]

bgr3 = [5 149 251]

bgr_mean = [5 62 81]

Button_image представляет собой изображение BGR с пустым массивом, и x(тип int) - это середина (ось X, DUH) изображения.Мой тестовый сценарий находится в том же проекте, что и другой код, с использованием Python 3.7.4 и той же версткой версии (1.16.3)

Это мой первый вопрос, поэтому я надеюсь, что написал правильно, заранее спасибоесли у вас есть представление о том, что это вызвало.

1 Ответ

0 голосов
/ 27 сентября 2019

Итак, как сказано в первом комментарии, проблема в dtype массива.Поскольку я выбирал значения BGR из массива изображений BGR, они унаследовали его dtype (uint8).Решение заключается в простом приведении каждого массива bgr к типу np.int32 перед вычислением их среднего значения:

bgr1 = (button_image[0][x]).astype(np.int32)

bgr2 = button_image[0][x-1].astype(np.int32)

bgr3 = button_image[1][x+1].astype(np.int32)

bgr_mean = ((bgr1 + bgr2 + bgr3) / 3).astype(int)
print("bgr_mean = " + str(bgr_mean))

bgr_mean = [5 148 252]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...