镜像但尺寸错误

时间:2013-04-15 15:51:34

标签: python image-processing resize

我正在尝试输入图像(image1)并将其水平翻转然后保存到文件(image2)。这可行但不是我想要的方式

目前这段代码为我提供了翻转图像,但它只是显示图像的右下角,因此尺寸错误。我在某处覆盖某些东西吗?我只是希望代码水平翻转图像并显示整个图片翻转。我哪里出错了?

而我不能只使用镜像功能或反向功能,我需要编写算法

我得到了正确的窗口大小,但图片大小不正确

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

3 个答案:

答案 0 :(得分:2)

我认为你的问题就在这一行:

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

GraphWin构造函数的第一个参数应该是标题,但是你给它一个Image对象。这让我相信你提供的宽度和高度可能会被忽略。 GraphWin的默认宽度和高度是200 x 200,因此根据图像的大小,这可能就是为什么只绘制其中的一部分。

尝试这样的事情:

win = graphics.GraphWin("Flipping an Image", img.getWidth(), img.getHeight())

另一个问题是图像的锚点是错误的。根据文档,锚点是图像的中心将被渲染的位置(因此在0,0,您只能看到图片的右下象限)。如果您不知道创建时图像的大小,这是一个可能的解决方案:

img = graphics.Image(graphics.Point(0, 0), image1)
img.move(img.getWidth() / 2, img.getHeight() / 2)

答案 1 :(得分:2)

您正在编辑源图像。这将是 最好创建一个图像副本并改为设置这些像素:

创建一个新图像进行编辑:

img_new = img

将像素值分配给:

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

取而代之的是:

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

这也将检查您的范围是否正确。如果不是,您将在最终图像中看到翻转和未翻盖的部分,显示哪些部分超出了您的范围。

答案 2 :(得分:0)

如果您不反对使用外部库,我建议使用Python Imaging Library。特别是,ImageOps模块具有mirror函数,该函数应该完全符合您的要求。