python填充周围图片的颜色_使用PIL用附近的颜色填充空白图像空间(也称为修复)...

我用PIL创建一个图像:

88d8f6b2cce912c1c8aebc6059b5f16c.png

我需要填补空白(被描绘成黑色)。我想用附近的颜色来填充颜色。例如,边界后的第一个像素可能是填充像素的高斯模糊。或者可能是The Lumigraph, Gortler, et al.中描述的推拉式算法。在

我需要一些不是太慢的东西,因为我必须在许多图像上运行这个。我可以访问其他库,比如numpy,您可以假设我知道外部区域或内部区域的边界或掩码。关于如何处理这个问题有什么建议吗?在

更新:

正如belisarius所建议的,opencv's inpaint方法非常适合于此。下面是一些python代码,它使用opencv实现我想要的:import Image, ImageDraw, cv

im = Image.open("u7XVL.png")

pix = im.load()

#create a mask of the background colors

# this is slow, but easy for example purposes

mask = Image.new('L', im.size)

maskdraw = ImageDraw.Draw(mask)

for x in range(im.size[0]):

for y in range(im.size[1]):

if pix[(x,y)] == (0,0,0):

maskdraw.point((x,y), 255)

#convert image and mask to opencv format

cv_im = cv.CreateImageHeader(im.size, cv.IPL_DEPTH_8U, 3)

cv.SetData(cv_im, im.tostring())

cv_mask = cv.CreateImageHeader(mask.size, cv.IPL_DEPTH_8U, 1)

cv.SetData(cv_mask, mask.tostring())

#do the inpainting

cv_painted_im = cv.CloneImage(cv_im)

cv.Inpaint(cv_im, cv_mask, cv_painted_im, 3, cv.CV_INPAINT_NS)

#convert back to PIL

painted_im = Image.fromstring("RGB", cv.GetSize(cv_painted_im), cv_painted_im.tostring())

painted_im.show()

以及得到的图像:

e88c28b48ad7ad5b66963a0ac245d91c.png

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值