本文目录导读:

我来介绍几种使用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在性能和功能上更强大。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播