python实现图像上下翻转代码_pypng在Python上的图像水平翻转

内环逻辑是错误的,但特别是这一行:image[c:c+3], image[-c-3: -c] = image[-c-3: -c], image[c:c+3]

您正在更改image变量,但似乎忘记了行变量r。所以现在,你正在换行。你的底片有点不对劲。对于c=0,您将得到image[-3:0],这不是一个有效的切片,它将返回[]。在

但是从您的代码来看,您并不是要在适当的地方更改image,而是希望创建{}。您应该做的是在new_row的末尾插入片:

^{pr2}$

顺便说一下,您也可以在适当的地方更改image,但要小心。当您传递一个list时,您应该在更改之前复制它,以使原始文件保持不变。这个版本是:def horizontal_flip(image):

cols = len(image[0])/3

#make a copy so that original image is not altered

image = [row[:] for row in image]

for row in image:

for c in range(int(cols/2)): # int() is not needed for Python 2.x, since integer division yields integer

# This also takes care of odd n cases, middle chunk is not changed.

row[3*c:3*c+3], row[3*(cols-c-1):3*(cols-c-1)+3] = row[3*(cols-c-1):3*(cols-c-1)+3], row[3*c:3*c+3]

return image

这也可以用单行的列表理解来完成,但是可读性较差。如果您愿意,以下是您可以做到的:from itertools import chain

flipped_image = [list(chain(*[row[3*i:3*i+3] for i in range(len(image[0])/3-1,-1,-1)])) for row in image]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值