rotate rotar imutils imagen python opencv rotation

rotar - OpenCV Python gira la imagen por X grados alrededor del punto específico



rotate rgb image python (6)

Ajuste rápido a la respuesta @ alex-rodrigues ... se ocupa de la forma, incluida la cantidad de canales.

import cv2 import numpy as np def rotateImage(image, angle): center=tuple(np.array(image.shape[0:2])/2) rot_mat = cv2.getRotationMatrix2D(center,angle,1.0) return cv2.warpAffine(image, rot_mat, image.shape[0:2],flags=cv2.INTER_LINEAR)

Me está costando encontrar ejemplos para rotar una imagen alrededor de un punto específico por un ángulo específico (a menudo muy pequeño) en Python usando OpenCV.

Esto es lo que tengo hasta ahora, pero produce una imagen resultante muy extraña, pero se gira un poco:

def rotateImage( image, angle ): if image != None: dst_image = cv.CloneImage( image ) rotate_around = (0,0) transl = cv.CreateMat(2, 3, cv.CV_32FC1 ) matrix = cv.GetRotationMatrix2D( rotate_around, angle, 1.0, transl ) cv.GetQuadrangleSubPix( image, dst_image, transl ) cv.GetRectSubPix( dst_image, image, rotate_around ) return dst_image


La función cv2.warpAffine toma el parámetro de forma en orden inverso: (col, row) que las respuestas anteriores no mencionan. Esto es lo que funcionó para mí:

import numpy as np def rotateImage(image, angle): row,col = image.shape center=tuple(np.array([row,col])/2) rot_mat = cv2.getRotationMatrix2D(center,angle,1.0) new_image = cv2.warpAffine(image, rot_mat, (col,row)) return new_image


O mucho más fácil usar SciPy

from scipy import ndimage #rotation angle in degree rotated = ndimage.rotate(image_to_rotate, 45)

mira here para más información de uso.


def rotate(image, angle, center = None, scale = 1.0): (h, w) = image.shape[:2] if center is None: center = (w / 2, h / 2) # Perform the rotation M = cv2.getRotationMatrix2D(center, angle, scale) rotated = cv2.warpAffine(image, M, (w, h)) return rotated



import numpy as np def rotateImage(image, angle): image_center = tuple(np.array(image.shape[1::-1]) / 2) rot_mat = cv2.getRotationMatrix2D(image_center, angle, 1.0) result = cv2.warpAffine(image, rot_mat, image.shape[1::-1], flags=cv2.INTER_LINEAR) return result

Suponiendo que está utilizando la versión cv2, ese código encuentra el centro de la imagen que desea rotar, calcula la matriz de transformación y se aplica a la imagen.