(课堂作业,有感而发,如有错误,敬请斧正!)
- def rotate_image(input_image, theta):
- input_rows, input_cols, channels = input_image.shape
- assert channels == 3
-
- # 1. Create an output image with the same shape as the input
- output_image = np.zeros_like(input_image)
- #获取中点坐标,具体参照np.shape()
- x0 = input_image.shape[1]/2
- y0 = input_image.shape[0]/2
-
- for i in range(input_image.shape[1]):#width
- for j in range(input_image.shape[0]):#heigh
- """
- (i,j)旋转后的坐标为(x,y),公式 数学推导
- 一点(x,y)绕点(x0,y0)旋转θ角度后的坐标(x`,y`)为:
- { x` = (x - x0)*cos - (y - y0)*sin + x0
- { y` = (x - x0)*sin + (y - y0)*cos + y0
- """
- x = (int)((i - x0)*np.cos(theta) - (j - y0)*np.sin(theta) + x0)
- y = (int)((i - x0)*np.sin(theta) + (j - y0)*np.cos(theta) + y0)
- if x < 300 and y < 300 and x >= 0 and y >= 0:#满足的所有条件
- output_image[i][j] = input_image[x][y]
- return output_image
-
测试:
- def display(img):
- # Show image
- plt.figure(figsize = (5,5))
- plt.imshow(img)
- plt.axis('off')
- plt.show()
-
- def load(image_path):
- out = None
- image = skimage.io.imread(image_path)#读入图片
- out = np.array(image)
- pass
- out = out.astype(np.float64) / 255
- return out
-
- if __name__ == '__main__':
- image1_path = './image1.jpg'
- image1 = load(image1_path)
- display(rotate_image(image1, np.pi / 4.0))
-
-
旋转后的你: