用python中的Pillow替换动态图像中的同一行像素
Posted
技术标签:
【中文标题】用python中的Pillow替换动态图像中的同一行像素【英文标题】:Replace same line of pixels in dynamic images with Pillow in python 【发布时间】:2015-08-12 11:33:46 【问题描述】:我正在尝试制定一个执行以下操作的算法,输入是左图,输出是右图:
重要提示:图像是动态生成的,我需要删除的水平线始终位于同一位置。
在输出中我并不真正关心颜色,它可能是这样的白色和黑色,虽然这可能有点复杂:
到目前为止,我已经想出了这个修改图像的算法:
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")
这会将图像变成黑白,有时会成功地将中间条与背景隔离开来,问题是,它不会删除水平线,也不会将颜色更改为垂直线之一要么。
请记住,颜色只是说明性和动态的,因此请考虑任何可能的颜色。
非常感谢任何建议/方法:)
更新:设法删除了水平线,但没有用垂直线颜色替换它们,因此只能部分解决问题(或根本没有)
【问题讨论】:
我想,理想情况下,您会在不需要的水平条纹下方的线条和上方的线条之间进行插值。我的意思是在下面的 10-20 条线和水平条纹上方的 10-20 条线之间有效地拟合一条曲线或直线。 别担心,我已经解决了问题,现在我需要别的东西,几分钟后会问新问题。 【参考方案1】:我不知道这需要有多准确,但是由于水平条的位置是固定的,您能否将像素值从每个水平条之前的行复制到水平条的每一行。
由于渐变背景,这看起来并不完美,但它可能足以满足您的目的。查看第一个示例图像,试试这个:
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)
样本输出
【讨论】:
也不要那样做。你问了这个问题并得到了答案。如果您自己解决了问题,您可以添加自己的答案,并将其标记为已接受。 ***.com/questions/31966970/…以上是关于用python中的Pillow替换动态图像中的同一行像素的主要内容,如果未能解决你的问题,请参考以下文章
python 使用zbar,cv2和PIL / Pillow扫描图像中的条形码。