在 Python 中处理图片可以借助多个强大的库,比如Pillow(PIL 的升级版)、OpenCV、matplotlib等。以下是一些常见的图片处理任务及实现代码,你可以根据需求参考: 一、安装必要的库 首先需要安装相关库,在命令行中执行: bash pip install pillow opencv-python matplotlib numpy 二、常用图片处理操作(基于 Pillow 库) Pillow是处理图片的基础库,支持常见的格式(JPG、PNG 等),操作简单。

  1. 打开并显示图片 python 运行 from PIL import Image

打开图片(替换为你的图片路径)

img = Image.open("test.jpg")

显示图片

img.show()

查看图片信息(尺寸、格式等)

print(f"尺寸:{img.size}(宽x高)") print(f"格式:{img.format}") print(f"模式:{img.mode}(RGB为彩色,L为灰度)") 2. 调整图片尺寸(缩放) python 运行 from PIL import Image

img = Image.open("test.jpg")

方法1:指定宽和高(可能变形)

resized_img1 = img.resize((400, 300)) # 宽400,高300 resized_img1.save("resized1.jpg")

方法2:按比例缩放(保持原比例)

width, height = img.size scale = 0.5 # 缩小到50% new_width = int(width * scale) new_height = int(height * scale) resized_img2 = img.resize((new_width, new_height)) resized_img2.save("resized2.jpg") 3. 裁剪图片 python 运行 from PIL import Image

img = Image.open("test.jpg")

裁剪区域:(left, upper, right, lower),坐标从左上角(0,0)开始

例如:裁剪左上角宽200、高300的区域

cropped_img = img.crop((0, 0, 200, 300)) cropped_img.save("cropped.jpg") 4. 转换为灰度图 python 运行 from PIL import Image

img = Image.open("test.jpg")

转换为灰度模式(L模式)

gray_img = img.convert("L") gray_img.save("gray.jpg") 5. 旋转图片 python 运行 from PIL import Image

img = Image.open("test.jpg")

旋转90度(逆时针)

rotated_img1 = img.rotate(90) rotated_img1.save("rotated90.jpg")

旋转180度(顺时针,使用expand=True保证不裁剪边缘)

rotated_img2 = img.rotate(-180, expand=True) rotated_img2.save("rotated180.jpg") 三、进阶处理(基于 OpenCV 库) OpenCV更适合复杂处理(如边缘检测、滤镜等),但需要注意它默认使用BGR格式(与 Pillow 的RGB不同)。

  1. 读取并显示图片(OpenCV 方式) python 运行 import cv2 import matplotlib.pyplot as plt

读取图片(OpenCV默认BGR格式)

img = cv2.imread("test.jpg")

转换为RGB格式(用于matplotlib显示)

img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

用matplotlib显示

plt.imshow(img_rgb) plt.axis("off") # 隐藏坐标轴 plt.show()

保存图片(OpenCV直接保存BGR格式,无需转换)

cv2.imwrite("opencv_saved.jpg", img) 2. 边缘检测(Canny 算法) python 运行 import cv2 import matplotlib.pyplot as plt

img = cv2.imread("test.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 先转灰度

Canny边缘检测

edges = cv2.Canny(gray, threshold1=50, threshold2=150)

显示结果

plt.imshow(edges, cmap="gray") plt.axis("off") plt.show() cv2.imwrite("edges.jpg", edges)

四、其他常见需求 添加文字 / 水印:用Pillow的ImageDraw模块,例如:...