1.imutils功能简介
imutils是在OPenCV基础上的⼀个封装,达到更为简结的调⽤OPenCV接⼝的⽬
的,它可以轻松的实现图像的平移,旋转,缩放,⻣架化等⼀系列的操作。
安装⽅法:
pip install imutils
# 在安装前应确认已安装numpy,scipy和opencv。
2.imutils的使⽤⽅法
2.1 图像平移
OpenCV中也提供了图像平移的实现,要先计算平移矩阵,然后利⽤仿射变换实现
平移,在imutils中可直接进⾏图像的平移。
translated = imutils.translate(img,x,y)
参数:
img:要移动的图像
x:沿x轴⽅向移动的像素个数
y: 沿y轴⽅向移动的像素个数
2.2 图像缩放
图⽚的缩放在OPenCV中要注意确保保持宽⾼⽐。⽽在imutils中⾃动保持原有图⽚
的宽⾼⽐,只指定宽度weight和Height即可。
img = cv.imread("lion.jpeg")
resized = imutils.resize(img,width=200)
print("原图像⼤⼩: ", img.shape)
print("缩放后⼤⼩:",resized.shape)
plt.figure(figsize=[10, 10])
plt.subplot(1,2,1)
plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))
plt.title('原图')
plt.axis("off")
plt.subplot(1,2,2)
plt.imshow(cv.cvtColor(resized, cv.COLOR_BGR2RGB))
plt.title('缩放结果')
plt.axis("off")
plt.show()
下图是对图像进⾏缩放后的结果:
2.3 图像旋转
在OpenCV中进⾏旋转时使⽤的是仿射变换,在这⾥图像旋转⽅法
是 imutils.rotate() ,跟2个参数,第⼀个是图⽚数据,第⼆个是旋转的⻆度,旋
转是朝逆时针⽅向。同时 imutils 还提供了另⼀个相似的⽅法, rotate_round() ,
它就是按顺时针旋转的。
import cv2
import imutils
image = cv2.imread('lion.jpeg')
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),相当于是⼀个粒度,越⼩需要处理的时间越⻓。
效果如下:
import cv2
import imutils
### 1 图像读取
image = cv2.imread('lion.jpeg')
# 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()