imutils介绍
imutils 是一个用于图像处理和计算机视觉任务的 Python 工具包。它提供了一系列方便实用的函数,可以简化常见的图像处理任务,imutils 库的始于 2015 年,作者是 Adrian Rosebrock。实际上,imutils是在OPenCV基础上的一个简单封装从而达到更为简结的调用OPenCV接口的目的,来轻松的实现图像的平移,旋转,缩放,骨架化等一系列的操作。本机安装该库后,可以使用help()函数查看更具体的介绍信息。
pip install imutils
图像平移
def translation():
img = cv.imread("opencv/cat.jpg")
img01 = imutils.translate(img,34,45)
# cv.imshow("result",img)
# cv.waitKey(0)
# cv.destroyAllWindows()
plt.figure()
plt.subplot(1,2,1)
plt.imshow(img01[:,:,::-1])
plt.subplot(1,2,2)
plt.imshow(img[:,:,::-1])
plt.show()
图像缩放
def zoom_img():
img = cv.imread("opencv/cat.jpg")
img01 = imutils.resize(img,width=100)
print(str(img.shape),img01.shape)
plt.figure()
plt.subplot(1,2,1)
plt.imshow(img[:,:,::-1])
plt.title(str(img.shape))
plt.subplot(1,2,2)
plt.imshow(img01[:,:,::-1])
plt.title(img01.shape)
plt.show()
图像旋转
def rotation():
img = cv.imread("opencv/cat.jpg")
rotated = imutils.rotate(img,90)
rotated_round = imutils.rotate_bound(img,90)
plt.figure()
for i,img in enumerate([img,rotated,rotated_round]):
plt.subplot(1,3,i+1)
plt.imshow(img)
plt.title(img.shape)
plt.show()
骨架提取
⻣架提取,是指对图⽚中的物体进⾏拓扑⻣架 (topological skeleton) 构建的过程。 imutils 提供的⽅法是 skeletonize() ,第⼆个参数是结构参数的尺⼨ (structuring element) ,相当于是⼀个粒度,越⼩需要处理的时间越⻓。
def img_skeleton():
img = cv.imread("opencv/img_2.png")
# 灰度图
img_gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
# 骨架提取
skeleton = imutils.skeletonize(img_gray,size=(3,3))
# 画板
plt.figure()
for i,img in enumerate([img,img_gray,skeleton]):
plt.subplot(1,3,i+1)
if i > 0 :
plt.imshow(img,cmap="gray")
else:
plt.imshow(img[:,:,::-1])
plt.title(img.shape)
plt.show()
Matplotlib 显示 在 OpenCV 的 Python 绑定中,图像以 BGR 顺序表示为 NumPy 数组。如果打算使⽤ Matplotlib ,该 plt.imshow 函 数将假定图像按 RGB 顺序排列。调⽤ cv2.cvtColor 解决此问题,也可以使 ⽤ opencv2matplotlib 便捷功能。
def test():
img = cv.imread("opencv/img_3.png")
plt.figure()
plt.subplot(1,2,1)
plt.imshow(img)
plt.subplot(1,2,2)
plt.imshow(imutils.opencv2matplotlib(img))
plt.show()
OPenCV 版本的检测
print("OPenCV版本: {}".format(cv2.__version__))
print("OPenCV是2.X? {}".format(imutils.is_cv2()))
print("OPenCV是3.X? {}".format(imutils.is_cv3()))
print("OPenCV是4.X? {}".format(imutils.is_cv4()))