gpt4 book ai didi

python - 使用 Python 镜像图像

转载 作者:太空宇宙 更新时间:2023-11-03 22:33:11 25 4
gpt4 key购买 nike

我需要水平翻转一张图片,没有使用反转功能,我以为我做对了,但返回的图片只是图片的右下角,并没有翻转。

我的代码是

def Flip(image1, image2):
img = graphics.Image(graphics.Point(0, 0), image1)
X = img.getWidth()
Y = img.getHeight()
for y in range(Y):
for x in range(X):
A = img.getPixel(x,y)
r = A[0]
g = A[1]
b = A[2]
color = graphics.color_rgb(r,g,b)
img.setPixel(X-x,y,color)
img = graphics.Image(graphics.Point(0,0), image2)
win = graphics.GraphWin(image2, img.getWidth(), img.getHeight())
img.draw(win)

我哪里出错了?

最佳答案

这里有一些我认为可以改进的地方:

def Flip(image1, image2):
img = graphics.Image(graphics.Point(0, 0), image1)
X = img.getWidth()
Y = img.getHeight()
for y in range(Y):
for x in range(X):
A = img.getPixel(x,y)
r = A[0]
g = A[1]
b = A[2]
color = graphics.color_rgb(r,g,b)

这个作业可以更Python:

            r, g, b = img.getPixel(x,y)
color = graphics.color_rgb(r,g,b)

img.setPixel(X-x,y,color)

img 现在将图像翻转一半。发生这种情况是因为您在同一图像源上编写内容,在到达中间之前随时丢失旧内容。 (请注意,X-x 会将图像大小增加 1 个像素。如果图像宽度为 100,则在第一次迭代中 X-x = 100 - 0 = 100 并且因为它从0,图像变宽 1 个像素。)然后,开始复制回来。此外,您不使用该内容是因为:

    img = graphics.Image(graphics.Point(0,0), image2)

问题在于:您只是覆盖了 img 的内容而没有给它任何用处。稍后:

    win = graphics.GraphWin(image2, img.getWidth(), img.getHeight())
img.draw(win)

这似乎与函数的目的(翻转图像)无关。我会做的是:

import graphics
import sys

def Flip(image_filename):
img_src = graphics.Image(graphics.Point(0, 0), image_filename)
img_dst = img_src.clone()
X, Y = img_src.getWidth(), img_src.getHeight()
for x in range(X):
for y in range(Y):
r, g, b = img_src.getPixel(x, y)
color = graphics.color_rgb(r, g, b)
img_dst.setPixel(X-x-1, y, color)

return img_dst

if __name__ == '__main__':
input = sys.argv[1] or 'my_image.ppm'
output = 'mirror-%s' % input
img = Flip (input)
img.save(output)

注意函数 Flip 只负责翻转图像,在函数之外你可以做任何你需要的图像,正如你在“主”程序中看到的那样。

如果你只想使用一张图片,这是可能的,而且效率更高。为此,您可以使用相同的原则在变量之间交换值:

def Flip(image_filename):
img = graphics.Image(graphics.Point(0, 0), image_filename)
X, Y = img.getWidth(), img.getHeight()
for x in range(X/2):
for y in range(Y):
r_1, g_1, b_1 = img.getPixel(x, y)
color_1 = graphics.color_rgb(r_1, g_1, b_1)

r_2, g_2, b_2 = img.getPixel(X-x-1, y)
color_2 = graphics.color_rgb(r_2, g_2, b_2)

img.setPixel(X-x-1, y, color_1)
img.setPixel(x, y, color_2)

return img

关于python - 使用 Python 镜像图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16006157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com