PIL替换颜色的最佳方法? - python

我正在尝试从图像中删除某种颜色,但是效果不如我希望的那样。我尝试做与此处Using PIL to make all white pixels transparent?相同的操作,但是图像质量有些损失,因此在删除的位置周围留下了一些奇怪的彩色像素鬼影。如果所有三个值均小于100,我尝试执行类似更改像素的操作,但是由于图像质量较差,周围的像素甚至没有变黑。

有谁知道用Python中的PIL替换颜色和周围颜色的更好方法吗?这可能是我可以想到的唯一可以完全删除对象的可靠方法,但是我想不出一种方法。

图片具有白色背景,文本为黑色。假设我要从图像中完全删除文本,而不会留下任何伪像。

真的很感谢某人的帮助!谢谢

python大神给出的解决方案

您需要将图像表示为二维数组。这意味着要么制作一个像素列表列表,要么使用一些聪明的数学方法将一维数组视为二维数组。然后,对于定位的每个像素,您需要找到所有周围的像素。您可以使用python生成器执行以下操作:

def targets(x,y):
    yield (x,y) # Center
    yield (x+1,y) # Left
    yield (x-1,y) # Right
    yield (x,y+1) # Above
    yield (x,y-1) # Below
    yield (x+1,y+1) # Above and to the right
    yield (x+1,y-1) # Below and to the right
    yield (x-1,y+1) # Above and to the left
    yield (x-1,y-1) # Below and to the left

因此,您可以这样使用它:

for x in range(width):
    for y in range(height):
        px = pixels[x][y]
        if px[0] == 255 and px[1] == 255 and px[2] == 255:
            for i,j in targets(x,y):
                newpixels[i][j] = replacementColor

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…

将Flask的request.files属性中的图像加载到PIL图像中 - python

image = Image.open(request.files["fullimage"]) 返回: IOError:无法识别图像文件和image = Image.open(request.files["fullimage"].read()) 返回: IOError:[Errno 22]无效模式('rb')或文件名:'…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

如何打印浮点数的全精度[Python] - python

我编写了以下函数,其中传递了x,y的值:def check(x, y): print(type(x)) print(type(y)) print(x) print(y) if x == y: print "Yes" 现在当我打电话check(1.00000000000000001, 1.0000000000000002)它正在打印:<…