Python 如何更改图像中某个区域的灰度值?
我是Python新手,不知道如何解决这个问题 我要做的是拍摄一张黑白图像,将边缘(x像素厚)的值从255更改为其他灰度值 我需要对文件夹中的一组png图像执行此操作。所有图像都是几何图形(大部分是直线的组合),没有疯狂的曲线或图案。使用Python3 请检查图片 典型的文件如下所示: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
我想这就是你想要的。这些评论应该很好地解释了我的想法:
#!/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,这正是我所需要的。我只需稍微更改一下,然后添加批处理代码。我真的很感谢你的帮助。很酷-很高兴我们加入了结束。祝你的项目好运!