python - 用python中的Pillow替换动态图像中的同一行像素

标签 python image algorithm python-imaging-library image-manipulation

我正在尝试制定一个执行以下操作的算法,输入是左图像,输出是右图像:

重要提示:图像是动态生成的,我需要删除的水平线始终位于同一位置。

enter image description here

在输出中我并不真正关心颜色,它可以是白色,也可以是黑色,尽管这可能有点复杂:

enter image description here

到目前为止,我已经想出了这个修改图像的算法:

def modify_image(filename):
    img = Image.open(filename)
    img = img.convert('RGBA')

    pixdata = img.load()

    for y in xrange(img.size[1]):
        for x in xrange(img.size[0]):
            if pixdata[x, y][0] in range(155, 190): #removes horizontal lines but doesn't change them to the vertical lines color
                pixdata[x, y] = (255, 255, 255, 255)
            if pixdata[x, y][0] < 135:
                pixdata[x, y] = (0, 0, 0, 255)

    for y in xrange(img.size[1]):
        for x in xrange(img.size[0]):
            if pixdata[x, y][1] < 195:
                pixdata[x, y] = (0, 0, 0, 255)

    for y in xrange(img.size[1]):
        for x in xrange(img.size[0]):
            if pixdata[x, y][2] > 0:
                pixdata[x, y] = (255, 255, 255, 255)

    img = img.resize((1000, 300), Image.NEAREST)
    im2 = Image.new('P', img.size, 255)
    im = img.convert('P')

    img.save(base_path + "current.jpg")

modify_image (base_path + "image.gif")

这会将图像变成黑色和白色,有时会成功地将中间条与背景隔离开来,问题是,它不会删除水平线,而且肯定不会将颜色更改为垂直线之一要么。

请记住,颜色只是说明性和动态性,因此请考虑任何可能的颜色。

非常感谢任何建议/方法:)

更新:设法删除了水平线,但没有用垂直线颜色替换它们,因此只能部分解决问题(或根本不能解决)

最佳答案

我不知道这需要多准确,但是,由于水平条的位置是固定的,您能否将每个水平条前一行的像素值复制到水平条的每一行。

由于渐变背景,这看起来并不完美,但它可能足以满足您的目的。查看第一个示例图像,试试这个:

import os.path
from PIL import Image

HORIZONTAL_BAND_1_Y = range(37, 64)
HORIZONTAL_BAND_2_Y = range(125, 149)

img = Image.open(filename)
img = img.convert('RGBA')
pixdata = img.load()

for band in HORIZONTAL_BAND_1_Y, HORIZONTAL_BAND_2_Y:
    for y in band:
        for x in range(img.size[0]):
            pixdata[x,y] = pixdata[x, band[0]-1]

new_filename = os.path.join(os.path.dirname(filename),
                   'new_{}'.format(os.path.basename(filename)))

img.save(new_filename)

示例输出

enter image description here

关于python - 用python中的Pillow替换动态图像中的同一行像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31964020/

相关文章:

python - 在html中添加python变量

python - Pandas:对列的子集应用过滤器

python - 如何在 Python 2.7 中将 re.sub 与 IGNORECASE 一起使用?

html - Angular 2 - 动态设置图像 URL

html - CSS:跳过部分链接中的下划线

python - odoo - 从 many2one 领域获取值(value)

c# - RGB 到 HSV 的转换导致图像嘈杂

C++中Java8 lambda类型的比较

python - 关于代码段的时间复杂度

c++ - 为什么有人会使用 set 而不是 unordered_set?