如果你是一名处于计算机视觉、图像识别、图像处理或者机器学习领域的开发者,那么 Python 无疑是你最好的朋友。Python 生态系统提供了丰富的机器学习、数据分析和计算机视觉库,如TensorFlow、Keras、PyTorch、Numpy、Pillow和OpenCV,这些库非常适合用于图像处理和计算机视觉。

在本文中,将介绍如何使用 Python 和 Pillow 库,以及如何利用 OpenCV 恰当地处理各种图像。

安装 Pillow 库

与往常一样,如果您想使用 Pillow 库,首先需要安装它。可以在命令行中运行以下命令:

pip install Pillow

导入和显示图像

在 Python 中打开图像文件非常简单。只需要使用 Pillow 库的 Image 类和 show() 方法即可,比如:

from PIL import Image

# 导入图像文件
img = Image.open("img.jpg")

# 显示图像
img.show()

缩放和重新采样图像

缩放和重新采样图像是图像处理中最基本的操作之一。两种最常见的缩放和重新采样技术是缩小图片并删除像素和对图片进行线性插值来放大图片。

Pillow 库提供了 resize() 方法来实现这个过程:

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

# 将图像大小变为原来大小的一半
image = image.resize((int(image.width/2), int(image.height/2)))

# 改变图像大小,宽变为100,高按比例缩放
new_image = image.resize((100, int(image.height / image.width * 100)))

裁剪图像

剪裁图像是指从原始图像中删掉一些内容。这个操作很常见,比如将垃圾图像中的非相关的区域删除。这可以通过使用 Pillow 库中的 crop() 函数来完成。

下面例子将演示如何尺寸为 (200, 200) 的设置中心裁剪为方形。

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

width, height = img.size
new_width = new_height = 200

x = (width - new_width) / 2
y = (height - new_height) / 2
img = img.crop((x, y, x + new_width, y + new_height))

调整图像亮度、对比度和饱和度

调整图像亮度、对比度和饱和度是图像处理中常用的操作方法。OpenCV 库提供了一些可以完成这个任务的函数,最常见的是 cv2.cvtColor() 和 cv2.addWeighted()cv2.cvtColor() 函数用于设置色彩通道,而 cv2.addWeighted() 函数用于添加两个图像并将它们以给定的权重混合。

Image.open('img.jpg')
	img = img.convert('HSV')
    brightness_multiplier = 1.2
    saturation_multiplier = 1.1

    # 调整亮度和饱和度
    img = ImageEnhance.Brightness(img).enhance(brightness_multiplier)
    img = ImageEnhance.Color(img).enhance(saturation_multiplier)
    img.show()

均衡化图像

图像直方图均衡化是一种可以改善图像对比度的技术。与其他图像处理技术相比,它是一种非常简单的过程,可以在几秒钟内引导您完成。OpenCV 库提供了 cv2.equalizeHist() 函数来实现这个操作,而使用 Pillow 库则需要通过先将图像转换为灰度再进行相应处理。

# 使用Pillow进行灰度处理
img = Image.open('img.jpg')
gray = img.convert('L')

# 调用Pillow直方图均衡函数
eq = ImageOps.equalize(gray)

总结

Pillow 库提供了许多有用的功能,可用于对图像进行各种处理。例如,可以使用 Pillow 对图像进行缩放、调整亮度和饱和度、均衡化直方图,甚至也可以在图像上绘制各种形状、字体、颜色、线条等等。相较于 Pillow 库,OpenCV 库对图像的处理能力更加强大。函数支持大量的图像处理和计算机视觉功能,并且这些函数较为稳定和可靠。希望这篇教程能让您对 Python 图像处理和计算机视觉有一个全新的认识。