当前,我正在尝试复制一张在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'”
我希望这个问题足够清楚。 谢谢。
答案 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
并将原始数组和翻转数组合并在一起,以提高应用程序的速度。