Python案例如何翻转图片方向?

wen python案例 48

本文目录导读:

Python案例如何翻转图片方向?

  1. 方法一:使用PIL/Pillow库
  2. 方法二:使用OpenCV库
  3. 方法三:使用matplotlib库
  4. 方法四:使用numpy进行高级操作
  5. 完整示例:批量处理文件夹中的图片
  6. 安装所需库
  7. 推荐使用场景

我来介绍几种使用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

推荐使用场景

  1. 简单翻转 → 使用PIL(轻量、简单)
  2. 计算机视觉任务 → 使用OpenCV(功能强大,处理速度快)
  3. 数据可视化 → 使用matplotlib
  4. 批量处理 → 使用PIL或OpenCV配合循环

选择哪种方法取决于你的具体需求,PIL/Pillow是最简单易用的,而OpenCV在性能和功能上更强大。

抱歉,评论功能暂时关闭!