Python 如何更改图像中某个区域的灰度值?

Python 如何更改图像中某个区域的灰度值?,python,image-processing,Python,Image Processing,我是Python新手,不知道如何解决这个问题 我要做的是拍摄一张黑白图像,将边缘(x像素厚)的值从255更改为其他灰度值 我需要对文件夹中的一组png图像执行此操作。所有图像都是几何图形(大部分是直线的组合),没有疯狂的曲线或图案。使用Python3 请检查图片 典型的文件如下所示: 我想这就是你想要的。这些评论应该很好地解释了我的想法: #!/usr/bin/env python3 import numpy as np from PIL import Image, ImageFilt

我是Python新手,不知道如何解决这个问题

我要做的是拍摄一张黑白图像,将边缘(x像素厚)的值从255更改为其他灰度值

我需要对文件夹中的一组png图像执行此操作。所有图像都是几何图形(大部分是直线的组合),没有疯狂的曲线或图案。使用Python3

请检查图片

典型的文件如下所示:
我想这就是你想要的。这些评论应该很好地解释了我的想法:

#!/usr/bin/env python3

import numpy as np
from PIL import Image, ImageFilter
from skimage.morphology import dilation, square

# Open input image and ensure it is greyscale
image = Image.open('XYbase.png').convert('L')

# Find the edges
edges = image.filter(ImageFilter.FIND_EDGES)

# Convert edges to Numpy array and dilate (fatten) with our square structuring element
selem = square(6)
fatedges = dilation(np.array(edges),selem)

# Make Numpy version of our original image and set all fatedges to brightness 128
imnp = np.array(image)
imnp[np.nonzero(fatedges)] = 128

# Convert Numpy image back to PIL image and save
Image.fromarray(imnp).save('result.png')
因此,如果我从这张图片开始:

(中间)边如下所示:

我得到的结果是:


如果希望轮廓更胖/更薄,请在以下位置增加/减少
6

selem = square(6)
imnp[np.nonzero(fatedges)] = 128
如果希望轮廓更亮/更暗,请在以下位置增加/减少
128

selem = square(6)
imnp[np.nonzero(fatedges)] = 128


关键词:图像、图像处理、肥胖、变厚、轮廓、痕迹、边缘、高光、Numpy、PIL、枕头、边缘、边缘、形态学、结构元素、略读、scikit图像、侵蚀、侵蚀、扩张、扩张。

我可以用更简单的方式解释你的问题,所以我想我也应该回答这个更简单的问题。也许你的形状周围已经有了灰色的边缘(比如你共享的Google drive文件),你只是想把所有既不是黑色也不是白色的像素换成不同的颜色——而它们是边缘这一事实是无关紧要的。这要容易得多:

#!/usr/bin/env python3

import numpy as np
from PIL import Image

# Open input image and ensure it is greyscale
image = Image.open('XYBase.png').convert('L')

# Make Numpy version
imnp = np.array(image)

# Set all pixels that are neither black nor white to 220
imnp[(imnp>0) & (imnp<255)] = 220

# Convert Numpy image back to PIL image and save
Image.fromarray(imnp).save('result.png')
#/usr/bin/env蟒蛇3
将numpy作为np导入
从PIL导入图像
#打开输入图像并确保其为灰度
image=image.open('XYBase.png')。convert('L'))
#制作Numpy版本
imnp=np.array(图像)
#将所有非黑白像素设置为220

imnp[(imnp>0)和(IMNP谢谢马克。我意识到我的问题问得不恰当。图像不会总是正方形。有时它也会是L形图像。我编辑了原始帖子来显示它。事实上,我想你又把我弄进去了!你在谷歌硬盘上提供的示例图像在形状周围已经有一个灰色边框-与你在没有边框的e问题。代码是在假设白色形状周围没有初始灰色边框的情况下编写的。哈哈,对不起。我上传了错误的图像。非常感谢Mark,这正是我所需要的。我只需稍微更改一下,然后添加批处理代码。我真的很感谢你的帮助。很酷-很高兴我们加入了结束。祝你的项目好运!