OpenCV Girar imagen

Ammar Ali 30 enero 2023
  1. Use la función rotate() de OpenCV para rotar una imagen en Python
  2. Utilice la función warpAffine() de OpenCV para rotar una imagen en Python
OpenCV Girar imagen

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:

rotar imágenes

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:

rotar imágenes con warpAffine

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.

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Artículo relacionado - Python OpenCV

Artículo relacionado - OpenCV Image