我需要帮助弄清楚如何将图像转换为深褐色。这是我目前所拥有的...但它只会将所有内容更改为带有一点棕色的白色颜色。我不确定我做错了什么:(
import image
def convertSepia(input_image):
grayscale_image = image.EmptyImage(input_image.getWidth(), input_image.getHeight())
for col in range(input_image.getWidth()):
for row in range(input_image.getHeight()):
p = input_image.getPixel(col, row)
R = p.getRed()
G = p.getGreen()
B = p.getBlue()
newR = (R * 0.393 + G * 0.769 + B * 0.189)
newG = (R * 0.349 + G * 0.686 + B * 0.168)
newB = (R * 0.272 + G * 0.534 + B * 0.131)
newpixel = image.Pixel(newR, newG, newB)
grayscale_image.setPixel(col, row, newpixel)
sepia_image = image.EmptyImage(input_image.getWidth(), input_image.getHeight())
for col in range(input_image.getWidth()):
for row in range(input_image.getHeight()):
p = grayscale_image.getPixel(col, row)
red = p.getRed()
if red > 140:
val = (R * 0.393 + G * 0.769 + B * 0.189)
else:
val = 0
green = p.getGreen()
if green > 140:
val = (R * 0.349 + G * 0.686 + B * 0.168)
else:
val = 0
blue = p.getBlue()
if blue > 140:
val = (R * 0.272 + G * 0.534 + B * 0.131)
else:
val = 0
newpixel = image.Pixel(val, val, val)
sepia_image.setPixel(col, row, newpixel)
return sepia_image
win = image.ImageWin() img = image.Image("luther.jpg")
sepia_img = convertSepia(img) sepia_img.draw(win)
win.exitonclick()
关于从这里去哪里还有什么建议吗?谢谢:)
4条答案
按热度按时间zxlwwiss1#
您的灰度图像不是灰度图像。在灰度图像中,所有三个通道
r
、g
、b
具有相同的值。打开paint并尝试验证您的代码是否合理。
修复这些行:
简单地使用
r
、g
、b
的平均值,并将其放入newR
、newG
和newG
中。也有一些加权平均值。只需谷歌RGB到强度公式。
qxgroojn2#
你可以转换图像为棕褐色的只是操纵像素值。以下是代码(免责声明:摘自this文章。)
原始图像
棕褐色图像
vaj7vani3#
这是我的解决方案,不需要转换到灰度之前棕褐色。我使用了棕褐色的公式:
完整代码:
n3h0vuf24#
使用
numpy
矢量化,实现速度会快很多。考虑以下代码,该代码将numpy
的矢量化实现与PIL
的循环实现进行比较,两者生成相同的输出图像(通过@Trect使用相同的海龟输入图像).从下面的输出可以看出,numpy
实现比PIL
的快 36 倍,对于给定的输入图像。