Как применить матрицу вращения?

Ниже приведена функция, которую я создаю для поворота изображения на заданный градус с использованием формулы матрицы поворота без предварительно созданной функции поворота.

Он отображает преобразованное изображение, но оно окрашено в синий цвет. Как я могу это исправить?

Любой намек на то, как наклонить изображение без заранее созданной функции, поможет.

import numpy as np
import cv2
from PIL import Image, ImageDraw
from math import sin, cos

def rotate_skew(img, theta_1):

    # Get dimensions of the input image.
    (rows, cols) = img.shape[:-1]

    # copy the rotation angle and convert to radians
    theta_1 = np.radians(theta_1)

    R = np.array(((np.cos(theta_1), -np.sin(theta_1)),
                  (np.sin(theta_1), np.cos(theta_1))))

    # convert array to PIL image object so draw would work
    im_pil = Image.fromarray(img)
    input_pixels = im_pil.load()

    img_new = Image.new("RGB", (rows, cols))
    draw = ImageDraw.Draw(img_new)

    center_x = rows / 2
    center_y = cols / 2

    # Copy pixels
    for x in range(rows):
        for y in range(cols):
            # Compute coordinate in input image
            xp = int((x - center_x) * cos(theta_1) - (y - center_y) * sin(theta_1) + center_x)
            yp = int((x - center_x) * sin(theta_1) + (y - center_y) * cos(theta_1) + center_y)
            if 0 <= xp < rows and 0 <= yp < cols:
                draw.point((x, y), input_pixels[xp, yp])

    img_new.show()
    return


# Read image
img = cv2.imread('face-1.jpg')
cv2.imshow('image',img)
cv2.waitKey(0)


rotate_skew(img, -90)

0 ответов

Другие вопросы по тегам