1.imutils功能简介
imutils是在OPenCV基础上的一个封装,达到更为简结的调用OPenCV接口的目的,它可以轻松的实现图像的平移,旋转,缩放,骨架化等一系列的操作。
安装方法:
pip install imutils
在安装前应确认已安装numpy,scipy,matplotlib和opencv。
2.imutils的使用方法
2.1 图像平移
OpenCV中也提供了图像平移的实现,要先计算平移矩阵,然后利用仿射变换实现平移,在imutils中可直接进行图像的平移。
translated = imutils.translate(img,x,y)
参数:
- img:要移动的图像
- x:沿x轴方向移动的像素个数
- y: 沿y轴方向移动的像素个数
import cv2
import numpy as np
import matplotlib.pyplot as plt
import imutils
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei'] # 简体
mpl.rcParams['axes.unicode_minus']= False
img = cv2.imread('01.jpg')
img_translate = imutils.translate(img, 20, 30)
plt.figure(figsize=(20,8), dpi=100)
plt.subplot(1,2,1)
plt.imshow(img[:,:,::-1])
plt.title("原图")
plt.subplot(1,2,2)
plt.imshow(img_translate[:,:,::-1])
plt.title("平移后")
2.2 图像缩放
图片的缩放在OPenCV中要注意确保保持宽高比。而在imutils中自动保持原有图片的宽高比,只指定宽度weight和Height即可。
img = cv2.imread('01.jpg')
img_resized = imutils.resize(img, height=200)
plt.figure(figsize=(20,8), dpi=100)
plt.subplot(1,2,1)
plt.imshow(img[:,:,::-1])
plt.title("原图")
plt.subplot(1,2,2)
plt.imshow(img_resized[:,:,::-1])
plt.title("缩放后")
2.3 图像旋转
在OpenCV中进行旋转时使用的是仿射变换,在这里图像旋转方法是imutils.rotate()
,跟2个参数,第一个是图片数据,第二个是旋转的角度,旋转是朝逆时针方向。同时imutils
还提供了另一个相似的方法, rotate_round()
,它就是按顺时针旋转的。
img = cv2.imread('01.jpg')
img_rotate1 = imutils.rotate(img, 90)
img_rotate2 = imutils.rotate(img, 180)
img_rotate3 = imutils.rotate_bound(img, 90)
plt.figure(figsize=(20,8), dpi=100)
plt.subplot(2,2,1)
plt.imshow(img[:,:,::-1])
plt.title("原图")
plt.subplot(2,2,2)
plt.imshow(img_rotate1[:,:,::-1])
plt.title("逆时针旋转90度")
plt.subplot(2,2,3)
plt.imshow(img_rotate2[:,:,::-1])
plt.title("逆时针旋转180度")
plt.subplot(2,2,4)
plt.imshow(img_rotate3[:,:,::-1])
plt.title("顺时针旋转180度")
2.4 骨架提取
骨架提取,是指对图片中的物体进行拓扑骨架(topological skeleton)构建的过程。imutils提供的方法是skeletonize(),第二个参数是结构参数的尺寸(structuring element),相当于是一个粒度,越小需要处理的时间越长。
import cv2
import imutils
# 1 图像读取
image= cv2.imread('./01.jpg')
# 2 灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 3 骨架提取
skeleton = imutils.skeletonize(gray, size=(3, 3))
# 4 图像展示
plt.figure(figsize=(10,8),dpi=100)
plt.subplot(121),plt.imshow(img[:,:,::-1]),plt.title('原图')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(skeleton,cmap="gray"),plt.title('骨架提取结果')
plt.xticks([]), plt.yticks([])
plt.show()