Python 为什么我的最终图像在像素后变成红色?
我将通过排序来消除图像的“噪声”,主要是椒盐噪声,然后将平均值分配给坐标。结果应该基于之前的颜色,但是我得到的颜色变成了红色 这个参数有错误吗?非常感谢Python 为什么我的最终图像在像素后变成红色?,python,image,python-imaging-library,Python,Image,Python Imaging Library,我将通过排序来消除图像的“噪声”,主要是椒盐噪声,然后将平均值分配给坐标。结果应该基于之前的颜色,但是我得到的颜色变成了红色 这个参数有错误吗?非常感谢 from PIL import Image path='MonaLisa.png' img=Image.open(path) members=[(0,0)]*9 size=width,height=img.size; newimg=Image.new("RGB",(width,height),"white") for i in rang
from PIL import Image
path='MonaLisa.png'
img=Image.open(path)
members=[(0,0)]*9
size=width,height=img.size;
newimg=Image.new("RGB",(width,height),"white")
for i in range(1,width-1):
for j in range(1,height-1):
members[0] = img.getpixel((i-1,j-1))
members[1] = img.getpixel((i-1,j))
members[2] = img.getpixel((i-1,j+1))
members[3] = img.getpixel((i,j-1))
members[4] = img.getpixel((i,j))
members[5] = img.getpixel((i,j+1))
members[6] = img.getpixel((i+1,j-1))
members[7] = img.getpixel((i+enter image description here1,j))
members[8] = img.getpixel((i+1,j+1))
members.sort()
newimg.putpixel((i,j),(members[4]))
newimg.show()
您所做的不是
mean
过滤器(其中每个像素被其相邻像素的平均值替换),而是median
过滤器(其中每个像素的相邻像素被排序,中心值或中值被用作新像素)
首先,使用PIL/枕头的内置功能更容易实现。我猜你是白手起家写这篇文章来学习一些图像处理。让我们假设一下
由于您没有提供示例图像,因此很难确定哪里出了问题。然而,我想问题在于:
是彩色图像,您只处理一个灰度值通道,因为您只循环图像高度和宽度,但不循环3个RGB通道,或者MonaLisa.png
是一幅灰度图像,但它是调色板,您看到的数字是调色板的索引,而不是实际的RGB值MonaLisa.png
# Open image as greyscale, not palettised, not colour
img=Image.open(path).convert('L')
其次,输出图像也应为灰度,因此:
newimg=Image.new("L",(width,height),"white")
图像变为红色的原因是,每个像素只写入一个字节,而不是所需的RGB的3个字节,因此只写入第一个通道(红色)