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