在python 3中不使用OpenCV的情况下旋转图像



我正在尝试在不使用OpenCv库的情况下使用最近邻和双线性插值在python中旋转图像,这是我的方法:

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);

但是我找不到为什么它不能正常工作,这是我得到的错误:

索引错误:索引 852 超出大小为 852 的轴 1 的范围

我应该确定如果像素的坐标最终超出原始图像怎么办:

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]

最新更新