1. Introduction à la fonction imutils
imutils est un package basé sur OPenCV pour atteindre l'objectif d'appeler l'interface OPenCV de manière plus concise.Il peut facilement implémenter une série d'opérations telles que la traduction d'image, la rotation, la mise à l'échelle et la squelettisation.
méthode d'installation:
pip install imutils
Avant l'installation, assurez-vous que numpy, scipy, matplotlib et opencv ont été installés.
2. Comment utiliser imutils
2.1 Traduction d'images
OpenCV fournit également la mise en œuvre de la traduction d'image. La matrice de traduction doit être calculée d'abord, puis la transformation affine est utilisée pour réaliser la traduction. La traduction d'image peut être directement effectuée dans imutils.
translated = imutils.translate(img,x,y)
paramètre:
- img: l'image à déplacer
- x: le nombre de pixels déplacés le long de l'axe x
- y: le nombre de pixels se déplaçant le long de l'axe 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 Zoom d'image
Dans OPenCV, le zoom de l'image doit prêter attention pour s'assurer que le rapport hauteur / largeur est conservé. Dans imutils, le rapport hauteur / largeur de l'image d'origine est automatiquement conservé, et seuls l'épaisseur et la hauteur peuvent être spécifiés.
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 Rotation de l'image
La transformation affine est utilisée lors de la rotation dans OpenCV. Ici, la méthode de rotation de l'image est imutils.rotate()
suivie de 2 paramètres. Le premier est les données d'image, le second est l'angle de rotation et la rotation est dans le sens antihoraire. En même temps, imutils
une autre méthode similaire est fournie rotate_round()
, qui tourne dans le sens des aiguilles d'une montre.
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 Extraction du squelette
L'extraction de squelette fait référence au processus de construction topologique du squelette des objets de l'image. La méthode fournie par imutils est skeletonize (). Le deuxième paramètre est la taille du paramètre de structure (élément structurant), qui équivaut à une granularité. Plus la taille est petite, plus le temps de traitement est long.
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()