Как сделать прозрачный цвет внутри границы в питоне

У меня есть изображения обнаружения опухоли головного мозга. Я хочу сделать прозрачный цвет внутри границы обнаружения в питоне.

Прозрачный цвет будет таким же, как цвет границы (122, 160, 255) с низкой непрозрачностью.

Изображение обнаружения опухоли головного мозга

Ожидаемый результат: Ожидаемое изображение

Отвечает ли это на ваш вопрос? Python PIL 0.5 непрозрачность, прозрачность, альфа

Bilal 04.02.2023 09:39

Эй, вы не добавили код, который вы пробовали, отредактируйте свою проблему и добавьте код, который вы пытались запустить, чтобы мы могли помочь вам лучше отладить проблему.

Mark Kapilyan 04.02.2023 09:43

Как rgb(122 160 255) может быть прозрачным? У него нет альфа-канала, то есть это не RGBA.

Mark Setchell 04.02.2023 10:16

Да, я хочу преобразовать этот цвет в альфа-канал

NX-DEV 04.02.2023 10:40

Это не имеет для меня особого смысла, извините. Можете ли вы нажать редактировать и добавить изображение ожидаемого результата, пожалуйста? Даже макетная версия хороша.

Mark Setchell 04.02.2023 10:42

Как хранится ваша граница? У вас есть список граничных пикселей? Или черное изображение с белыми граничными пикселями? Или что?

Mark Setchell 04.02.2023 11:14

У меня есть черное изображение с граничными пикселями белого цвета.

NX-DEV 04.02.2023 11:15

Хорошо, это изображение относится к вашему вопросу, тогда, пожалуйста.

Mark Setchell 04.02.2023 11:59

Вы вообще пробовали мой ответ? Как вы попали на?

Mark Setchell 15.02.2023 21:49
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
9
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот как это сделать:

  • загрузить граничное изображение в оттенках серого и пороговое значение
  • найти примерный центр опухоли
  • залить внутреннюю часть опухоли со значением = 64, оставив границу = 255
  • создать персиковое наложение того же размера, что и оригинал
  • вставьте оттенки серого в персиковое наложение в качестве альфа-слоя
  • наклеить накладку на оригинал

#!/usr/bin/env python3

from PIL import Image, ImageDraw

# Open boundary image and ensure greyscale
im = Image.open('boundary.png').convert('L')

# Get the bounding box so we can guesstimate its centre for flood-filling
bbox = im.getbbox()
cx = int((bbox[0]+bbox[1])/2)
cy = int((bbox[2]+bbox[3])/2)
print(f'DEBUG: cx = {cx}, cy = {cy}')

# Threshold the boundary image to pure black and white
thresh = im.point(lambda p: 255 if p>128 else 0)

# Flood-fill with 64 starting from the centre and proceeding to a pure white boundary border
ImageDraw.floodfill(thresh, (cx,cy), 64, border=255)
thresh.save('DEBUG-flood-filled.png')

# Open the original image
scan = Image.open('a0pMX.png')

# Create a peachy overlay, then push in the alpha layer
overlay = Image.new('RGB', scan.size, 'rgb(255,160,122)')
overlay.putalpha(thresh)
overlay.save('DEBUG-overlay.png')

# Paste the overlay onto the scan
scan.paste(overlay, mask=overlay)
scan.save('result.png')

Вот промежуточные изображения:

DEBUG-flood-filled.png

DEBUG-overlay.png

результат.png

Другие вопросы по теме