Python, доступ к определенным значениям в массиве

#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 не имеют никакого эффекта.