Python,AttributeError:“ NoneType”对象没有属性“ show”

时间:2018-10-01 22:54:56

标签: python

当前,我正在尝试复制一张在python上一半的图片并使其对称。图片中包含像素总数的一半。 左侧是原稿。而且我想从左到右复制那些像素,并使整个图片对称

原始图片如下:

a a b b - - - -

a b c d - - - -

a b a b - - - - 

输出的图片将是:

a a b b b b a a

a b c d d c b a

a b a b b a b a

我正在处理的代码如下:

from csmedia import *

def symmetry(img):
    output_image = None

     w, h = img.size()
     for y in range(h):
         for x in range(w):
         os = img.get(x, y)
         img.set(w - x - 1, y, os)
     return output_image

if __ name__ == __main__:
     img = load_picture('img/half_star.png')
     image = symmetry(img)
     image.show

但是,当我运行代码时,它却给我“ AttributeError:'NoneType'对象没有属性'show'”

我希望这个问题足够清楚。 谢谢。

2 个答案:

答案 0 :(得分:1)

可能您只是想做:

output_image.set(w - x - 1, y, os)

代替

img.set(w - x - 1, y, os)

答案 1 :(得分:1)

您的symmetry函数不是构建输出图像,而是修改原始图像。您可以这样修改它:

def symmetry(img):
    w, h = img.size()

    output_image = Image(width=2*w, height=h)  # Or whatever method your library provides to create an empty image object

    for y in range(h):
        for x in range(w):
            original_pixel = img.get(x, y)
            output_image.set(x, y, original_pixel)  # Copying original image
            output_image.set(w - x - 1, y, original_pixel)  # mirroring original image

    return output_image

请注意,如果您使用的是OpenCV(用于图像处理的最常用的库),则python的for循环并不是完成这项工作的最佳工具。您可以使用numpy.flip并将原始数组和翻转数组合并在一起,以提高应用程序的速度。