OpenCV Girar imagen
-
Use la función
rotate()
de OpenCV para rotar una imagen en Python -
Utilice la función
warpAffine()
de OpenCV para rotar una imagen en Python
Este tutorial discutirá la rotación de una imagen usando la función rotate()
y warpAffine()
de OpenCV en Python.
Use la función rotate()
de OpenCV para rotar una imagen en Python
Podemos usar la función rotate()
de OpenCV para rotar una imagen. El primer argumento de la función rotate()
es la imagen que queremos rotar. El segundo argumento especifica cuánto rotará la imagen y en qué dirección.
Solo hay tres formas de rotar una imagen usando la función rotate()
. Podemos establecer el segundo argumento en cv2.ROTATE_90_CLOKWISE
para rotar la imagen 90 grados en el sentido de las agujas del reloj.
Podemos usar el cv2.ROTATE_180
para rotar la imagen 180 grados o voltearla. Podemos usar cv2.ROTATE_90_COUNTERCLOCKWISE
para rotar la imagen 90 grados en el sentido contrario a las agujas del reloj o 270 grados en el sentido de las agujas del reloj. Estos son los únicos tres ángulos para rotar una imagen usando la función rotate()
.
Por ejemplo, leamos una imagen usando la función imread()
, gírela 90 grados en el sentido de las agujas del reloj y luego mostrémosla junto con la imagen original usando la función imshow()
. Vea el código a continuación.
import cv2
import numpy as np
image = cv2.imread("cat.jpg")
image_norm = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)
cv2.imshow("original Image", image)
cv2.imshow("Rotated Image", image_norm)
cv2.waitKey(0)
cv2.destroyAllWindows()
Producción:
Usando rotate()
, solo podemos rotar una imagen en tres ángulos, pero si queremos rotar una imagen en cada ángulo, podemos usar la función warpAffine()
, que se analiza a continuación.
Utilice la función warpAffine()
de OpenCV para rotar una imagen en Python
Podemos usar la función warpAffine()
de OpenCV para rotar una imagen en cualquier ángulo. La función warpAffine()
transforma un array por otra matriz.
Para rotar una imagen, tenemos que encontrar su matriz de rotación usando la función getRotationMatrix2D()
de OpenCV.
El primer argumento de getRotationMatrix2D()
es el centro de la imagen por el que queremos rotarla. El segundo argumento es el ángulo de rotación y el tercer argumento es la escala de la imagen.
Si la escala es menor que uno, la imagen se volverá más pequeña que la imagen original, o en otras palabras, se alejará. La imagen se escalará o ampliará si la escala es un número positivo. Si la escala es 1, la imagen no se escalará.
El primer argumento de la función warpAffine()
es la imagen que queremos rotar. El segundo argumento es la matriz de rotación y el tercer argumento es el tamaño de la imagen de salida.
Por ejemplo, giremos la imagen de arriba a 45 grados alrededor de su centro. Vea el código a continuación.
import cv2
import numpy as np
image = cv2.imread("cat.jpg")
(h, w) = image.shape[:2]
center = (w / 2, h / 2)
angle = 30
scale = 1
M = cv2.getRotationMatrix2D(center, angle, scale)
rotated = cv2.warpAffine(image, M, (w, h))
cv2.imshow("original Image", image)
cv2.imshow("Rotated Image", rotated)
cv2.waitKey(0)
cv2.destroyAllWindows()
Producción:
En el código anterior, usamos el método de la forma para encontrar la longitud y el ancho de la imagen dada, y luego calculamos el centro de la imagen tomando la mitad de la longitud y el ancho. Podemos cambiar el centro, el ángulo y el valor de escala para obtener el resultado deseado.
También podemos establecer el modo de borde de la imagen de salida usando el argumento borderMode
. De forma predeterminada, el modo de borde está configurado en cv2.BORDER_CONSTANT
, y como puede ver, no hay borde en las esquinas de la imagen de salida.
Podemos establecer el modo de borde en cv2.BORDER_TRANSPARENT
. La imagen de salida tendrá los mismos bordes que la imagen original, o las esquinas seguirán siendo las mismas.
Podemos establecer el modo de borde en cv2.BORDER_REPLICATE
. El borde o las esquinas de la imagen de salida se dibujarán utilizando los píxeles cercanos.
Haga clic en este enlace para obtener más detalles sobre los modos de borde.
Artículo relacionado - Python OpenCV
- Configuración del paquete OpenCV
- Enmascaramiento de imágenes en OpenCV
- Marcadores OpenCV ArUco
- Módulo OpenCV-contrib en Python
- Ningún módulo llamado CV2 en Mac en Python
- OpenCV Canny en Python