Imagen transformación geométrica
En principio la imagen transformación geométrica incluye dos tipos: matriz 2x3 de transformación afín (traducción, escala, rotación, flip), basado en la matriz de 3x3 transformación de perspectiva.
traducción imagen
OpenCV para conseguir una traducción imagen
Lograr la traducción de la imagen, es necesario definir una matriz sigue, tx y ty son x y la dirección y distancia de traslación:
la imagen usando la función cv.warpAffine traducción transformación afín () implementado
experimento
# 图像平移
import numpy as np
import cv2 as cv
img = cv.imread('paojie.jpg')
rows, cols = img.shape[:2]
# 定义平移矩阵,需要是numpy的float32类型
# x轴平移100,y轴平移50
M = np.float32([[1, 0, 100], [0, 1, 50]])
# 用仿射变换实现平移,第三个参数为dst的大小
dst = cv.warpAffine(img, M, (cols, rows))
cv.imshow('shift', dst)
cv.waitKey(0)
cv.destroyAllWindows()
Los resultados experimentales
escalado de imagen
OpenCV en el escalado de imagen
Zoom es cambiar el tamaño de la función de la imagen, el uso cv.resize () para lograr la adaptación de la imagen. Sí, también se puede enfocar de acuerdo con la escala de tamaño especificado.
experimento
# 图像缩放
import numpy as np
import cv2 as cv
img = cv.imread('paojie.jpg')
# 按照指定的宽度、高度缩放图片
res = cv.resize(img, (132, 150))
# 按照比例缩放,如x,y方向均放大一倍
# res2 = cv.resize(img, None, fx=2, fy=2, interpolation=cv.INTER_CUBIC)
cv.imshow('shrink', res)
# cv.imshow('zoom', res2)
cv.waitKey(0)
cv.destroyAllWindows()
Los resultados experimentales
modo de interpolación Varios
Referencia: diversos métodos de interpolación descritos
rotación de imagen
breve introducción
Lo mismo que la traducción de rotación, se utiliza el afín transformar, y por lo tanto necesidad de definir una matriz de transformación. Proporcionar función directa OpenCV cv.getRotationMatrix2D () para generar la matriz, la función tiene tres parámetros:
Parámetro 1: rotación de imagen centro
de parámetros 2: ángulo de rotación (n: en sentido antihorario, negativa: las agujas del reloj)
Parámetro 3: de escala, 0,5 se reduce a la mitad
experimento
# 图像旋转
import numpy as np
import cv2 as cv
img = cv.imread('paojie.jpg')
rows,cols = img.shape[:2]
# 逆时针45°旋转图片并缩小一半,第一个参数为旋转中心
M = cv.getRotationMatrix2D((cols / 2, rows / 2), 45, 0.5)
# img:源图像;M:旋转仿射矩阵;(cols,rows):dst的大小
dst = cv.warpAffine(img, M, (cols, rows))
cv.imshow('rotation', dst)
cv.waitKey(0)
cv.destroyAllWindows()
Los resultados experimentales
giro de imagen
El giro de imagen OpenCV
dst = cv2.flip (img, 1)
en el que la función del segundo parámetro es mayor que 0, representa la imagen volteada horizontalmente (a lo largo del eje y); el segundo parámetro es igual a 0, representa un giro de imagen vertical (eje x), una primera dos parámetros es menor que 0, representa la imagen tanto horizontal invertida y verticalmente invertida.
experimento
# 图像翻转
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img = cv.imread('paojie.jpg')
# 水平翻转
hor = cv.flip(img,1)
# 垂直翻转
ver = cv.flip(img,0)
# 水平垂直翻转
hor_ver = cv.flip(img,-1)
plt.figure(1)
plt.subplot(2,2,1)
plt.imshow(img)
plt.title('Original')
plt.xticks([]),plt.yticks([])
plt.subplot(2,2,2)
plt.imshow(hor)
plt.title('horizontal')
plt.xticks([]),plt.yticks([])
plt.subplot(2,2,3)
plt.imshow(ver)
plt.title('vertical')
plt.xticks([]),plt.yticks([])
plt.subplot(2,2,4)
plt.imshow(hor_ver)
plt.title('horizontal_and_vertical')
plt.xticks([]),plt.yticks([])
plt.show()
Los resultados experimentales
Después de leer el artículo completo, no apunte un elogio relajarse.