Python循环实现图像垂直翻转的代码问题求助
问题排查与修复方案
你的代码存在两个核心问题,导致垂直翻转异常:
1. 垂直翻转的循环范围错误
垂直翻转只需要交换前半部分行和对应的后半部分行(比如第0行和最后一行、第1行和倒数第二行),遍历所有行的话,会把已经交换过的行再次交换,相当于白做了一半操作,最终只完成了部分翻转。
2. 水平与垂直翻转逻辑耦合混乱
当vertical=True时,你先执行了水平翻转的像素交换,再执行垂直方向的交换,这不是纯粹的垂直翻转,而是两种翻转的错误叠加;同时在列循环里处理垂直交换,会导致像素被重复错误替换。
修复后的代码
def flip(image, vertical=False): height = len(image) width = len(image[0]) if vertical: # 垂直翻转:交换前半行和对应后半行 for row in range(height // 2): # 直接交换整行,无需遍历列 image[row], image[height - row - 1] = image[height - row - 1], image[row] else: # 水平翻转:每行内交换左右半部分像素 for row in range(height): for col in range(width // 2): image[row][col], image[row][width - col - 1] = image[row][width - col - 1], image[row][col] return True
修复说明
- 垂直翻转直接交换整行,无需逐像素处理,效率更高且逻辑清晰;
- 水平和垂直翻转逻辑完全分离,根据
vertical参数执行对应操作; - 垂直翻转的循环范围改为
height//2,避免重复交换。
内容的提问来源于stack exchange,提问作者Fairytail52
相关产品推荐
相关产品推荐

