У меня есть аэрофотоснимок:
Мне удалось получить бинарное изображение русла речной части:
После применения преобразования расстояния и некоторых методов сегментации я смог получить бинарное изображение средней линии реки:
Мой вопрос: как наложить белые пиксели с линии реки, чтобы они были «сверху» исходного изображения?
Вот пример:
это не работает, я хотел, чтобы они отображались как сюжет, и когда я складываю их вместе, линия реки не отображается
Только исходное изображение
Как вы сделали свой «пример результата»? Мне кажется, что вы знаете, что это может сделать? Кроме того, странно задавать здесь вопрос да/нет. Вы уверены, что не собираетесь спрашивать, как это сделать, вместо того, можно ли это сделать?
это упражнение из курса обработки изображений, на которое у меня нет ответа, и изображение показано в качестве примера
Это очень простой способ решить вашу проблему. Но это работает.
import cv2
original = cv2.imread('original.png') # Orignal image
mask = cv2.imread('line.png') # binary mask image
result = original.copy()
for i in range(original.shape[0]):
for j in range(original.shape[1]):
result[i, j] = [255, 255, 255] if mask[i, j][0] == 255 else result[i, j]
cv2.imwrite('result.png', result) # saves modified image to result.png
Однако это дает мне ошибку: "неверный индекс скалярной переменной"
в этой строке: результат[i, j] = [255, 255, 255], если маска[i, j][0] == 255, иначе результат[i, j]
Вы использовали именно мой код? Это не должно давать никакой ошибки.
какая у тебя версия питона?
Да, я сделал. это 3,8
Я читал изображение с помощью модуля Imageio. Использование cv2 решило проблему.
Предположим, ваши изображения представляют собой пустые массивы с именами img
и mask
. Предположим также, что img
имеет форму (M, N, 3)
, а mask
имеет форму (M, N)
. Наконец, давайте предположим, что img
не соответствует dtype np.uint8
, а mask
имеет тип np.bool_
. Если последнее предположение неверно, начните с
mask = mask.astype(bool)
Теперь вы можете напрямую установить канал реки на 255:
img[mask, :] = 255
Если бы img
было одним изображением в градациях серого без третьего измерения, как в вашем последнем примере, вы бы просто удалили :
из индексного выражения выше. На самом деле, вы можете написать его для работы с любым числом измерений с помощью
img[mask, ...] = 255
Просто добавить 2 изображения?