Я читаю изображение, снятое через opencv, и хочу сопоставить функцию каждому значению пикселя в изображении. Выходными данными является массив массивов m x n x 3, где m и n - координаты длины и ширины изображения, а три значения - соответствующие значения синего, зеленого и красного для каждого пикселя.
Сначала я подумал запустить вложенный цикл for для каждого значения в изображении. Однако запуск занимает много времени, поэтому я ищу более эффективный способ быстрого зацикливания изображения.
Вот вложенный цикл:
a = list()
for row in img:
for col in row:
a.append(np.sqrt(np.prod(col[1:])))
adjusted = np.asarray(a).reshape((img.shape[0], img.shape[1]))
Этот код работает, но я бы хотел, чтобы он работал быстрее. Я знаю, что векторизация может быть вариантом, но я не знаю, как применить ее только к части массива, а не ко всему массиву. Для этого, я думаю, я мог бы изменить его на img.reshape((np.prod(img.shape[:2]),3))
, а затем перебрать каждый набор из трех значений, но я не знаю правильную функцию / итератор для использования.
Кроме того, если opencv / numpy / scipy имеет другую функцию, которая делает именно это, это было бы очень полезно. Я также открыт для других вариантов, но я хотел бы поделиться некоторыми своими идеями.
В конце я хочу взять входные данные и вычислить среднее геометрическое значений красного и зеленого и создать массив геометрических средних n x m. Любая помощь будет оценена!