#python #arrays #image #numpy #opencv
#python #массивы #изображение #numpy #opencv
Вопрос:
Я работаю с компьютерным зрением и хочу вычислить координаты хроматической диаграммы изображения, в которой используется формула:
r = R / (R G B)
Я работаю с массивами numpy и создал двумерный массив для хранения всех значений r
.
Я не хочу использовать матричное умножение, потому что я хочу умножать только элементы двух матриц, которые находятся в одном и том же положении (т.Е. finalmatrix[1][1] = matrix[1][1] * othermatrix[1][1]
, finalmatrix[1][1] = matrix[2][2] * othermatrix [2][2]...finalmatrix[n][n] = matrix[n][n] * othermatrix [n][n]
).
Код, который я пробовал:
fruta2 = np.ones((720,1280), dtype= np.uint8)
frutar = np.ones((720, 1280), dtype= np.uint8)
for i in fruta2:
for j in i:
frutar[i][j] = fruta2[i][j] * ((fruta[i][j][0])/(fruta[i][j][0] fruta[i][j][1] fruta[i][j][2]))
Он вернул ошибку:
ValueError: operands could not be broadcast together with shapes (1280,) (3,)
Переменная fruta
представляет собой RGB-изображение фрукта.
Я понимаю, что это не работает, потому что один массив имеет 2 измерения, а другой — 3 измерения. Но я пытаюсь получить доступ к элементам и выполнить с ними арифметику. Что я могу сделать?
Комментарии:
1. Является
fruta
трехмерным массивом? Если это так, вы можете получить весь красный канал с помощьюfruta[:,:,0]
, весь зеленый канал с помощьюfruta[:,:,1]
и синий канал с помощьюfruta[:,:,2]
и просто выполнить операцию.2. Да, это так. Это изображение RGB, поэтому оно имеет 3 измерения. Я протестирую ваше предложение, большое вам спасибо.
3.
i
в вашем цикле находится строкаfruta2
, а не индекс. Такfruta2[i]
неправильно. Аналогично,j
это элемент этой строки, элементfruta2
2d-массива.4. Если вы создаете правильные индексы, например,
for i in range(fruta2.shape[0]):
, используйтеfrutar[i,j]
стиль индексации. Это понятнее, чем[i][j]
и более идиоматично для numpy.