2012-02-16 618 views

回答

25

像这样的东西应该工作。

from PIL import Image, ImageFilter 

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

如果不给你你正在寻找的,那么你尝试实现要么普鲁伊特边缘检测,Sobel边缘检测或Canny边缘检测使用PIL和Python等图书馆见相关question及以下example结果。

如果你正在尝试做的粒子检测/分析,而不仅仅是边缘检测,你可以尝试使用py4ij给你打电话链接ImageJ的方法给你所期望的结果相同,或尝试其它颗粒分析Python库EMAN交替你可以使用PIL,SciPy和NumPy编写粒子检测算法。

+0

嗨, 照片是彩色的,甚至当我灰化他们和运行过滤器它不能正常工作,因为我只是想要苹果形状的轮廓,这有可能吗? 它类似于rsbweb.nih.gov/ij/docs/pdfs/examples.pdf中描述的imageJ方法。 谢谢 – user1212200 2012-02-17 14:53:30

+1

@ Appleman1234,非常感谢你提及我的文章。嘿,你可以导入Canny边缘检测模块并运行它来单独查找边缘。输出将是一个numpy的ndarray,但你可以使用im = Image.fromarray(imarray) – Vishwanath 2012-02-20 14:48:46

+0

@Appleman将图像转换为基于FIND_EDGES的组件分解成PIL图像? – user1658296 2016-08-31 07:46:05

4

如果你的对象和背景都相当不错对比

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种颜色),您可将图像分割成多个频带,而不是将其转换为灰度。

如果图像或背景是相当复杂的,更复杂的处理将需要