Python imutils库核心功能与实战指南

半杯拿铁
半杯拿铁
发布时间:2026-10-14| 4人浏览过
原创

本文介绍Python中基于OpenCV封装的imutils库,涵盖安装方法及图像平移、缩放、旋转、骨架提取等核心功能。通过具体代码示例,展示如何利用imutils简化OpenCV操作,包括处理BGR/RGB格式转换及OpenCV版本检测,帮助开发者高效实现图像预处理任务。

imutils库简介

imutils是一个基于OpenCV构建的Python封装库,旨在简化OpenCV接口的调用。它提供了便捷的图像处理方法,能够轻松实现图像的平移、旋转、缩放以及骨架化等常见操作,显著降低开发复杂度。

安装准备

pip install imutils

在执行安装前,请确保环境中已预先安装numpy、scipy、matplotlib以及opencv库,这些是imutils运行的基础依赖。

若遇到缺失包的报错信息

可执行以下命令一次性安装所有相关依赖包:

pip install NumPy SciPy opencv-python matplotlib imutils

imutils核心功能使用

2.1 图像平移操作

相较于原生OpenCV需要手动构造平移矩阵,imutils允许直接指定平移的像素偏移量,操作更为直观简便。

虽然OpenCV原生支持通过仿射变换实现图像平移,但imutils封装后无需计算矩阵即可直接调用平移功能。

translated = imutils.translate(img,x,y)

参数说明:

  • img:待处理的输入图像
  • x:沿X轴方向移动的像素数量
  • y:沿Y轴方向移动的像素数量

代码运行注意事项:

请确保图片文件路径中不包含中文字符,以免导致读取失败。

OpenCV读取图像默认采用BGR格式,而Matplotlib显示图像期望RGB格式。因此,代码中使用img[:,:,::-1]进行通道翻转,以正确显示彩色图像。


import numpy as np
import cv2 as cv
import imutils
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号


img = cv.imread('image1.jpg')  # 更改图片地址
translated = imutils.translate(img,100,50)  # 平移函数

plt.figure()
plt.subplot(121)
plt.imshow(img[:,:,::-1])  # img[:,:,::-1]转换是为了转回RGB格式,这样才可以正常显示彩色图像
plt.title('原图')
plt.subplot(122)
plt.imshow(translated[:,:,::-1])
plt.title('平移结果')
plt.show()

2.2 图像缩放处理

在OpenCV中进行缩放时,开发者需手动确保宽高比不变。imutils则自动保持原始图片的宽高比例,用户只需指定目标宽度weight或高度height即可。

缩放函数调用方式:imutils.resize(img,width=100)


import numpy as np
import cv2 as cv
import imutils
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号


img = cv.imread('image1.jpg')
# 说明一般如果有width参数,就会安装width参数进行缩放,不会理会height参数,如果两个参数不成比例,也是安装width进行缩放
resized = imutils.resize(img,width=100)  # 指定宽度,会自动计算相应比例高度,还有参数height


print('原图大小:',img.shape)
print('缩放后大小', resized.shape)
plt.figure()
plt.subplot(121)
plt.imshow(img[:,:,::-1])
plt.title('原图')
plt.subplot(122)
plt.imshow(resized[:,:,::-1])
plt.title('缩放图')
plt.show()

2.3 图像旋转功能

OpenCV原生旋转依赖仿射变换,而imutils提供了imutils.rotate()函数,接收图像数据和旋转角度两个参数,默认执行逆时针旋转。此外,imutils模块还提供了rotate_round()方法,用于执行顺时针旋转。

具体函数调用如下:

逆时针旋转示例

rotated = imutils.rotate(image, 90)

顺时针旋转示例

rotated_round = imutils.rotate_bound(image, 90)


import numpy as np
import cv2 as cv
import imutils
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号


image = cv.imread('image1.jpg')
# 逆时针旋转
rotated = imutils.rotate(image, 90)                     
# 顺时针旋转
rotated_round = imutils.rotate_bound(image, 90)         # 画图              
plt.figure(figsize=[10, 10])
plt.subplot(1,3,1)
plt.imshow(img[:,:,::-1])
plt.title('原图')
plt.axis("off")
plt.subplot(1,3,2)
plt.imshow(rotated[:,:,::-1])
plt.title('逆时针旋转90度')
plt.axis("off")
plt.subplot(1,3,3)
plt.imshow(rotated_round[:,:,::-1])
plt.title('顺时针旋转90度')
plt.axis("off")
plt.show()

2.4 骨架提取(边缘细化)

骨架提取旨在构建图像中物体的拓扑骨架(topological skeleton),常用于图像细化处理。

imutils提供的实现方法为skeletonize()。

该方法的第二个参数为结构元素尺寸(structuring element),相当于处理粒度。粒度值越小,处理耗时越长。实验中可选用(3,3)或(7,7)等尺寸。

需注意,并非所有图像都适合进行骨架提取,例如部分复杂图案(如示例中的哆啦A梦)可能无法生成有效骨架。


import cv2 as cv
import imutils
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号


# 1 图像读取
image2 = cv.imread('earth.png')
# 2 灰度化
gray = cv.cvtColor(image2, cv.COLOR_BGR2GRAY)
# 3 骨架提取
skeleton = imutils.skeletonize(gray, size=(7, 7))

# 4 图像展示
plt.figure()
plt.subplot(121),plt.imshow(image2[:,:,::-1]),plt.title('原图')

plt.subplot(122),plt.imshow(skeleton,cmap="gray"),plt.title('骨架提取结果')  # 显示灰度图要声明 gray

plt.show()

2.5 格式转换与Matplotlib显示

在OpenCV的Python绑定中,图像以NumPy数组形式按BGR顺序存储。cv2.imshow函数对此处理良好,但plt.imshow函数假设图像按RGB顺序排列。为解决此兼容性问题,可调用cv2.cvtColor进行格式转换,或使用opencv2matplotlib便捷功能直接处理。


img = cv.imread("lion.jpeg")
plt.figure()
plt.imshow(imutils.opencv2matplotlib(img))

2.6 OpenCV版本检测

OpenCV 4发布后,版本更新带来的向后兼容性问题日益突出。使用OpenCV时,建议先检查当前环境版本以调用合适的函数。imutils中的is_cv2()、is_cv3()和is_cv4()功能可用于自动检测当前OpenCV版本,简化版本适配工作。


print("OPenCV版本: {}".format(cv2.__version__))

本文介绍了Python imutils库的基本概念与使用方法,更多相关技术内容可参考本站其他文章或持续关注后续更新,感谢支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。