引言
在当今数字化的时代,图像处理已经成为了数据科学、人工智能乃至日常办公自动化中不可或缺的一部分。python 作为一门简单易学且功能强大的编程语言,拥有极其丰富的第三方生态系统。无论你是想给照片加个滤镜、批量调整图片大小,还是想入门计算机视觉(cv),python 都能为你提供完美的工具。
本文将以系统且专业的方式,为初学者盘点 python 中最主流的图像处理库。我们将从基础到进阶,带你了解它们各自的特点,并提供简单易懂的代码示例。
准备工作
在开始探索这些强大的图像处理库之前,请确保你已经具备以下基础条件:
- 安装 python 环境:确保你的电脑上安装了 python 3.7 或更高版本。
- 基础的 python 知识:了解变量、函数、以及如何运行一个简单的 python 脚本。
- 包管理工具:熟悉如何使用
pip来安装第三方库。我们将在介绍每个库时提供相应的安装命令。 - 一张测试图片:在你的代码目录下准备一张图片(例如
test.jpg),以便跟随本文进行实操。
主流图像处理库详解
1. pillow (pil fork):新手的最佳入门选择
pillow 是 python imaging library (pil) 的一个活跃分支。它是 python 中最基础、最直观的图像处理库。如果你只需要进行裁剪、缩放、旋转、调整颜色或添加文字等日常操作,pillow 绝对是你的首选。
- 特点:简单易用、文档丰富、轻量级。
- 安装:
pip install pillow
代码示例:使用 pillow 调整图片大小
from pil import image
# 1. 打开一张图片
img = image.open('test.jpg')
# 2. 获取图片的原始尺寸
print(f"原始尺寸: {img.size}")
# 3. 调整图片大小为宽300,高200
resized_img = img.resize((300, 200))
# 4. 显示图片
resized_img.show()
# 5. 保存处理后的图片
resized_img.save('resized_test.jpg')
2. opencv (open source computer vision library):工业级计算机视觉霸主
opencv 是目前世界上最流行的开源计算机视觉库。虽然它的底层是用 c++ 编写的,但它的 python 接口(opencv-python)极其强大。除了基础的图像处理,它还支持人脸识别、目标检测、视频流分析等高级功能。
- 特点:性能极高、功能极其强大、适合进阶和工业级项目。
- 安装:
pip install opencv-python
代码示例:使用 opencv 将图片转换为黑白(灰度图)
import cv2
# 1. 读取图片
img = cv2.imread('test.jpg')
# 2. 将彩色图片转换为灰度图(黑白)
gray_img = cv2.cvtcolor(img, cv2.color_bgr2gray)
# 3. 弹窗显示结果
cv2.imshow('gray image', gray_img)
# 4. 等待用户按键后关闭窗口
cv2.waitkey(0)
cv2.destroyallwindows()
# 5. 保存图片
cv2.imwrite('gray_test.jpg', gray_img)
3. scikit-image:科学计算与图像分析利器
scikit-image 是基于 python 科学计算生态(numpy, scipy)构建的图像处理库。如果你的工作涉及医学图像分析、天文图像处理或需要使用复杂的算法(如边缘检测、图像分割),这个库会非常适合你。
- 特点:算法严谨、与 numpy 无缝结合、适合科研和数据分析。
- 安装:
pip install scikit-image
代码示例:使用 scikit-image 进行边缘检测
from skimage import io, filters, color
import matplotlib.pyplot as plt
# 1. 读取图片
img = io.imread('test.jpg')
# 2. 转换为灰度图
gray_img = color.rgb2gray(img)
# 3. 使用 sobel 算子进行边缘检测
edges = filters.sobel(gray_img)
# 4. 使用 matplotlib 显示结果
plt.imshow(edges, cmap='gray')
plt.title('edge detection')
plt.axis('off')
plt.show()
常见误区与避坑指南
对于初学者来说,在处理图像时很容易遇到以下几个“坑”:
- 色彩通道顺序的混淆 (rgb vs bgr):
- 误区:认为所有库读取图片的颜色顺序都是一样的。
- 避坑:pillow 和 scikit-image 默认以 rgb(红绿蓝)顺序读取图像;而 opencv 历史遗留原因,默认以 bgr(蓝绿红)顺序读取。如果用 opencv 读取图片直接用 matplotlib 显示,颜色会变得非常诡异(比如红苹果变蓝苹果)。解决方案是使用
cv2.cvtcolor(img, cv2.color_bgr2rgb)进行转换。
- 坐标系与矩阵索引:
- 误区:把图像的 ( x , y ) (x, y) (x,y) 坐标和矩阵的 ( r o w , c o l ) (row, col) (row,col) 混为一谈。
- 避坑:在获取图像尺寸或裁剪时,pillow 使用
(宽, 高)即(x, y)坐标;而基于 numpy 的库(如 opencv 和 scikit-image)将图像视为矩阵,其形状为(行, 列, 通道数),即(高, 宽, 通道数)。
- 选错工具:
- 误区:为了简单裁剪图片而去学习庞大的 opencv。
- 避坑:杀鸡焉用牛刀。如果是简单的日常批处理,pillow 是最高效的选择;如果涉及深度学习和复杂视觉任务,再引入 opencv。
学习与总结
python 丰富的生态为图像处理提供了无限可能。对于完全的初学者,建议的学习路径如下:
- 第一步:先熟练掌握 pillow,了解像素、尺寸、格式转换等基本概念。
- 第二步:学习基本的 numpy 数组操作,因为高级图像处理本质上是对矩阵进行数学运算。
- 第三步:根据兴趣或工作需求,深入学习 opencv(计算机视觉方向)或 scikit-image(数据分析与科研方向)。
掌握图像处理是迈向计算机视觉和人工智能的重要一步。不要害怕代码报错,准备几张有趣的图片,现在就开始你的 python 图像处理之旅吧!
以上就是python图像处理之新手必看的主流图片处理库盘点的详细内容,更多关于python主流图片处理库盘点的资料请关注代码网其它相关文章!
发表评论