повернуть изображение без использования OpenCV в Python 3 - PullRequest
1 голос
/ 20 октября 2019

Я пытаюсь повернуть изображение в python с использованием ближайшего соседа и билинейной интерполяции без использования библиотеки OpenCv, и вот мой подход:

import matplotlib.image as img
import numpy as npy
import math

m = img.imread("room.png");

w, h = m.shape[:2];

newImage = npy.zeros([w,h, 4]);

for i in range(w - 1):
    for j in range(h - 1):
        newImage[i , j] = m[int(math.cos(30)*(i-w/2)+math.sin(30)*(j-h/2) + w/2),int(math.cos(30)*(j-h/2)-math.sin(30)*(i-w/2) + h/2)]

img.imsave('rotated.png', newImage);

, но я не мог найти, почему он не работает нормальновот ошибка, которую я получил:

IndexError: индекс 852 выходит за пределы оси 1 с размером 852

1 Ответ

0 голосов
/ 20 октября 2019

Я должен был определить, что, если координаты пикселя оказались за пределами исходного изображения:

for i in range(w - 1):
    for j in range(h - 1):
        pixelNewX = int(math.cos(math.pi/6)*(i-w/2)+math.sin(math.pi/6)*(j-h/2)+w/2)
        pixelNewY = int(math.cos(math.pi/6)*(j-h/2)-math.sin(math.pi/6)*(i-w/2)+h/2)
        if 0 <= pixelNewX < w and 0 <= pixelNewY < h :
            newImage[i, j] = m[pixelNewX, pixelNewY]
...