Контур изображения с использованием Python / PIL - PullRequest
19 голосов
/ 17 февраля 2012

У меня есть цветная фотография яблока, как я могу показать только его контур (внутри белый, черный фон) с python / PIL?

Ответы [ 2 ]

29 голосов
/ 17 февраля 2012

Как-то так должно работать.

from PIL import Image, ImageFilter

image = Image.open('your_image.png')
image = image.filter(ImageFilter.FIND_EDGES)
image.save('new_name.png') 

Если это не дает того результата, который вы ищете, попробуйте реализовать функцию обнаружения краев Prewitt, Sobel Edge или Canny edge с использованием PIL и Python, а также другие библиотеки, см. Связанный вопрос и следующий пример .

Если вы пытаетесь выполнить обнаружение / анализ частиц, а не просто обнаружение краев, вы можете попытаться использовать py4ij для вызова метода ImageJ, на который вы ссылаетесь, чтобы получить ожидаемый результат, или попробовать другой анализ частиц Библиотека Python EMAN поочередно вы можете написать алгоритм обнаружения частиц, используя PIL, SciPy и NumPy.

4 голосов
/ 12 марта 2012

Если ваш объект и фон достаточно хорошо контрастируют

from PIL import Image
image = Image.open(your_image_file)
mask=image.convert("L")
th=150 # the value has to be adjusted for an image of interest 
mask = mask.point(lambda i: i < th and 255)
mask.save(file_where_to_save_result)

если более высокая контрастность в одном (из 3 цветов), вы можете разбить изображение на полосы вместо преобразования его в оттенки серого.

если изображение или фон довольно сложны, потребуется более сложная обработка

...