本文目录导读:

我来介绍几种使用Python翻转图片方向的方法:
使用PIL/Pillow库
from PIL import Image
# 打开图片
img = Image.open('input.jpg')
# 水平翻转(左右翻转)
img_horizontal = img.transpose(Image.FLIP_LEFT_RIGHT)
# 垂直翻转(上下翻转)
img_vertical = img.transpose(Image.FLIP_TOP_BOTTOM)
# 旋转90度
img_90 = img.rotate(90, expand=True)
# 旋转180度
img_180 = img.rotate(180)
# 旋转270度
img_270 = img.rotate(270, expand=True)
# 保存结果
img_horizontal.save('horizontal_flip.jpg')
img_vertical.save('vertical_flip.jpg')
img_90.save('rotate_90.jpg')
使用OpenCV库
import cv2
import numpy as np
# 读取图片
img = cv2.imread('input.jpg')
# 水平翻转(1表示水平翻转)
img_horizontal = cv2.flip(img, 1)
# 垂直翻转(0表示垂直翻转)
img_vertical = cv2.flip(img, 0)
# 水平和垂直都翻转(-1表示两个方向都翻转)
img_both = cv2.flip(img, -1)
# 旋转90度(顺时针)
img_90 = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
# 旋转180度
img_180 = cv2.rotate(img, cv2.ROTATE_180)
# 旋转270度(逆时针90度)
img_270 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Horizontal Flip', img_horizontal)
cv2.imshow('Vertical Flip', img_vertical)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 保存结果
cv2.imwrite('horizontal_flip.jpg', img_horizontal)
使用matplotlib库
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
# 读取图片
img = mpimg.imread('input.jpg')
# 水平翻转
img_horizontal = img[:, ::-1] # 列反向
# 垂直翻转
img_vertical = img[::-1, :] # 行反向
# 显示结果
plt.figure(figsize=(12, 4))
plt.subplot(1, 3, 1)
plt.imshow(img)'Original')
plt.axis('off')
plt.subplot(1, 3, 2)
plt.imshow(img_horizontal)'Horizontal Flip')
plt.axis('off')
plt.subplot(1, 3, 3)
plt.imshow(img_vertical)'Vertical Flip')
plt.axis('off')
plt.tight_layout()
plt.show()
使用numpy进行高级操作
import numpy as np
from PIL import Image
def flip_image_advanced(image_path, output_path, flip_type='horizontal'):
"""
翻转图片的高级函数
flip_type: 'horizontal', 'vertical', 'both', 'transpose'
"""
# 读取图片
img = Image.open(image_path)
img_array = np.array(img)
if flip_type == 'horizontal':
# 水平翻转
flipped = np.fliplr(img_array)
elif flip_type == 'vertical':
# 垂直翻转
flipped = np.flipud(img_array)
elif flip_type == 'both':
# 同时翻转
flipped = np.fliplr(np.flipud(img_array))
elif flip_type == 'transpose':
# 转置
flipped = img_array.transpose(1, 0, 2) if len(img_array.shape) == 3 else img_array.T
# 保存结果
result_img = Image.fromarray(flipped)
result_img.save(output_path)
return result_img
# 使用示例
flip_image_advanced('input.jpg', 'horizontal_flip.jpg', 'horizontal')
flip_image_advanced('input.jpg', 'both_flip.jpg', 'both')
完整示例:批量处理文件夹中的图片
import os
from PIL import Image
import cv2
def batch_flip_images(input_folder, output_folder, flip_type='horizontal'):
"""
批量翻转文件夹中的图片
"""
# 创建输出文件夹
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 遍历所有图片
for filename in os.listdir(input_folder):
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):
# 读取图片
img_path = os.path.join(input_folder, filename)
img = Image.open(img_path)
# 翻转图片
if flip_type == 'horizontal':
flipped = img.transpose(Image.FLIP_LEFT_RIGHT)
elif flip_type == 'vertical':
flipped = img.transpose(Image.FLIP_TOP_BOTTOM)
elif flip_type == 'rotate_180':
flipped = img.rotate(180)
# 保存结果
output_path = os.path.join(output_folder, f"flipped_{filename}")
flipped.save(output_path)
print(f"Processed: {filename}")
# 使用示例
batch_flip_images('input_folder', 'output_folder', 'horizontal')
安装所需库
# 安装PIL/Pillow pip install Pillow # 安装OpenCV pip install opencv-python # 安装matplotlib pip install matplotlib # 安装numpy pip install numpy
推荐使用场景
- 简单翻转 → 使用PIL(轻量、简单)
- 计算机视觉任务 → 使用OpenCV(功能强大,处理速度快)
- 数据可视化 → 使用matplotlib
- 批量处理 → 使用PIL或OpenCV配合循环
选择哪种方法取决于你的具体需求,PIL/Pillow是最简单易用的,而OpenCV在性能和功能上更强大。