我的图像数据主要包含无聊的黑色背景包围的圆形图像。我通过使用PIL的getbbox()抓取边界框,然后进行裁剪来处理此问题。这让我有些满意,但是在无聊的黑色海洋中出现的微小灰色斑点导致getbbox()返回太大的边界框。
附加了故意生成的有问题的图像;请注意右下角的单个深灰色像素。我还包括了一个更典型的“现实世界”图像。
Generated problematic image Real-world image
我在PIL ImageFilter模块中使用UnsharpMask和SHARP和BLUR过滤器做了一些麻烦,但没有成功。
我想扔掉那些杂散的灰色像素并得到一个不错的边框,但又不占用我的图像数据。
答案 0 :(得分:1)
您要对图像的副本运行中位数过滤器以获取边界框,然后将该边界框应用于原始的,未模糊的图像。所以:
以下是一些入门代码:
#!/usr/local/bin/python3
import numpy as np
from PIL import Image, ImageFilter
# Load image
im = Image.open('eye.png').convert('L')
orig = im.copy() # Save original
# Threshold to make black and white
thr = im.point(lambda p: p > 128 and 255)
# Following line is just for debug
thr.save('result-1.png')
# Median filter to remove noise
fil = thr.filter(ImageFilter.MedianFilter(3))
# Following line is just for debug
fil.save('result-2.png')
# Get bounding box from filtered image
bbox = fil.getbbox()
# Apply bounding box to original image and save
result = orig.crop(bbox)
result.save('result.png')