Opencv или Numpy - эффективно заменить список пикселей на изображении - PullRequest
0 голосов
/ 18 октября 2018

Привет OpenCV или Numpy Gurus,

Я искал ответ на этот вопрос, но я удивлен, что не нашел его здесь или в другом месте ...

У меня естьчерное изображение, и я хочу заменить список пикселей (довольно большой список) с определенным значением.В будущем «определенное значение» будет списком значений, но на данный момент давайте сделаем это просто.

Упрощая еще больше, я просто использую двумерный массив одиночных чисел ниже, вместо значений RGB ... Итак, этот довольно неэффективный подход работает для такого рода вещей:

a = np.zeros((5, 5,1))

for i in np.asarray( ([2,3],[3,4]) ):
       a[i[0], i[1]] = 20

Я надеялся, что есть способ использовать np.put в двумерном массиве, где я не полагаюсь на цикл Python.

Теперь у меня было предположение, что я мог бы использовать

a[ ([2,3],[3,4]) = 20

Однако я замечаю, что когда я использую этот подход в моей реальной проблеме OpenCV, он не работает.Этот очень неэффективный подход делает:

coords_list = ([3,5],[55,60],[25,90])
black_image =np.zeros((480,640,3))
for i in coords_list:
    black_image[i[1],i[0]] = [255,255,255]

Я ожидаю, что это простой вопрос для многих.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Спасибо, Пол Панцер и RomualdM ...

Это, кажется, делает то, что я хочу, основываясь на их комментариях ...

coords_list = ([3,5],[55,60],[25,90])
black_image =np.zeros((480,640,3))
I,J = np.transpose(coords_list)
black_image[I,J] = [255,255,255]
cv2.imshow('black_image', black_image)
while (1):
    k = cv2.waitKey(0) #press esc to kill
    if (k == 27):
        break

cv2.destroyAllWindows()
0 голосов
/ 18 октября 2018

Фактически, вы можете напрямую использовать ваш кортеж координат для индексации вашей матрицы: простой a[([2, 3], [3, 4])] = 20 дает тот же результат, что и ваш цикл for.

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