gpt4 book ai didi

python - 使用 PIL 用附近的颜色填充空白图像空间(也称为修复)

转载 作者:太空狗 更新时间:2023-10-29 18:33:04 24 4
gpt4 key购买 nike

我用 PIL 创建一个图像:

example image

我需要填充空白区域(显示为黑色)。我可以很容易地用静态颜色填充它,但我想做的是用附近的颜色填充像素。例如,边界后的第一个像素可能是填充像素的高斯模糊。或者可能是 The Lumigraph, Gortler, et al. 中描述的推拉式算法.

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

更新:

根据 belisarius 的建议,opencv's inpaint方法非常适合这个。这是一些使用 opencv 实现我想要的 python 代码:

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()

以及生成的图像:

painted image

最佳答案

一个效果不错的方法是 Navier-Stokes Image Restoration.我知道 OpenCV 有它,不知道 PIL。

你的例子:

enter image description here enter image description here

我用 Mathematica 做到了。

编辑

根据您的要求,代码是:

i = Import["http://i.stack.imgur.com/uEPqc.png"];
Inpaint[i, ColorNegate@Binarize@i, Method -> "NavierStokes"]

ColorNegate@ ... 部分创建替换 mask 。填充仅通过 Inpaint[] 命令完成。

关于python - 使用 PIL 用附近的颜色填充空白图像空间(也称为修复),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7098410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com