pythonimutils包基本概念及使⽤
1.imutils功能简介
imutils是在OPenCV基础上的⼀个封装,达到更为简结的调⽤OPenCV接⼝的⽬的,它可以轻松的实现图像的平移,旋转,缩放,⾻架化等⼀系列的操作。
安装⽅法:
pip install imutils
在安装前应确认已安装numpy,scipy,matplotlib和opencv。
如果出现缺失包错误
可以使⽤下⾯安装命令,会把所有包安装
pip install NumPy SciPy opencv-python matplotlib imutils
2.imutils的使⽤⽅法
2.1 图像平移
相对于原来的cv,使⽤imutiles可以直接指定平移的像素,不⽤构造平移矩阵
OpenCV中也提供了图像平移的实现,要先计算平移矩阵,然后利⽤仿射变换实现平移,在imutils中可直接进⾏图像的平移。
translated = anslate(img,x,y)
参数:
img:要移动的图像
x:沿x轴⽅向移动的像素个数
y: 沿y轴⽅向移动的像素个数
运⾏代码说明:
要更改图⽚地址,地址中不能包含中⽂
cv读取图⽚是BGR格式,img[:,:,::-1]转换是为了转回RGB格式,这样才可以正常显⽰彩⾊图像
import numpy as np
import cv2 as cv
import imutils
import matplotlib.pyplot as plt
img = cv.imread('image1.jpg')  # 更改图⽚地址
translated = anslate(img,100,50)  # 平移函数
plt.figure()
plt.subplot(121)
plt.imshow(img[:,:,::-1])  # img[:,:,::-1]转换是为了转回RGB格式,这样才可以正常显⽰彩⾊图像
plt.title('原图')
plt.subplot(122)
resizedplt.imshow(translated[:,:,::-1])
plt.title('平移结果')
plt.show()
2.2 图像缩放
图⽚的缩放在OPenCV中要注意确保保持宽⾼⽐。⽽在imutils中⾃动保持原有图⽚的宽⾼⽐,只指定宽
度weight和height即可。
缩放函数:size(img,width=100)
import numpy as np
import cv2 as cv
import imutils
import matplotlib.pyplot as plt
img = cv.imread('image1.jpg')
# 说明⼀般如果有width参数,就会安装width参数进⾏缩放,不会理会height参数,如果两个参数不成⽐例,也是安装width进⾏缩放
resized = size(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中进⾏旋转时使⽤的是仿射变换,在这⾥图像旋转⽅法是ate(),跟2个参数,第⼀个是图⽚数据,第⼆个是旋转的⾓度,旋转是朝逆时针⽅向。同时imutils还提供了另⼀个相似的⽅法, rotate_round(),它就是按顺时针旋转的。
函数:
逆时针旋转
rotated = ate(image, 90)
顺时针旋转
rotated_round = ate_bound(image, 90)
import numpy as np
import cv2 as cv
import imutils
import matplotlib.pyplot as plt
image = cv.imread('image1.jpg')
# 逆时针旋转
rotated = ate(image, 90)
# 顺时针旋转
rotated_round = ate_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
# 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 转RGB,使⽤Matplotlib显⽰
在OpenCV的Python绑定中,图像以BGR顺序表⽰为NumPy数组。使⽤该cv2.imshow功能时效果很好。但是,如果打算使⽤Matplotlib,该plt.imshow函数将假定图像按RGB顺序排列。调⽤cv2.cvtColor解决此问题,也可以使⽤opencv2matplotlib便捷功能。img = cv.imread("lion.jpeg")
plt.figure()
plt.imshow(imutils.opencv2matplotlib(img))
2.6 OPenCV版本的检测
OpenCV 4发布之后,随着主要版本的更新,向后兼容性问题尤为突出。在使⽤OPenCV时,应检查当前正在使⽤哪个版本的OpenCV,然后使⽤适当的函数或⽅法。在imutils中的is_cv2()、is_cv3()和is_cv4()是可⽤于⾃动确定当前环境的OpenCV的版本简单的功能。
print("OPenCV版本: {}".format(cv2.__version__))
到此这篇关于python imutils包简介使⽤的⽂章就介绍到这了,更多相关python imutils包内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。