#python #arrays #image #for-loop #pixel
Вопрос:
У меня есть массив координат (y,x), относящихся к определенным пикселям на изображении fig300[0,:,:]. Я хочу найти эти координаты на своем изображении и для этих пикселей изменить их интенсивность.
Вывод моего массива, называемого brighter_spot, выглядит следующим образом:
array([[116, 159],
[508, 106],
[ 90, 752],
[116, 159],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[134, 380],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106],
[ 90, 752],
[116, 159],
[235, 206],
[508, 106]], dtype=int64)
Я построил цикл for таким образом:
for y,x in brighter_spot:
if fig300[0,y,x] == brighter_spot.any():
fig300[0,y,x] = 0
Цикл for не имеет никакого эффекта, я думаю, что он неправильно работает внутри массива, сравнивая каждую пару.
Как я мог это исправить?
Комментарии:
1. Извините, в первой строке for-loop нет слова «диапазон», это была опечатка.
Ответ №1:
Попробуйте это:
for y in range(brighter_spot):
for x in range(y):
if np.isin(brighter_spot, fig300[0, y, x]).any():
fig300[0,y,x] = 0
Комментарии:
1. Таким образом, сообщение об ошибке выглядит следующим образом: ошибка типа: только целочисленные скалярные массивы могут быть преобразованы в скалярный индекс
Ответ №2:
«Я хочу найти эти координаты на своем изображении и для этих пикселей изменить их интенсивность».
Просто сделайте
for x,y in brighter_spot:
fig300[0,y,x] = ...
Не уверен, чего вы хотите достичь с brighter_spot.any()
помощью . вам следует проверить документ: https://numpy.org/doc/stable/reference/generated/numpy.any.html
Это позволяет искать любое значение, отличное от None, в массиве. В вашем случае он всегда возвращается true
, и затем вы сравниваете значение пикселя с логическим значением на каждой итерации, что всегда возвращается False
. Вот почему действия в цикле for не имеют никакого эффекта.