import numpy as np
import matplotlib.pyplot as plt
import cv2
import math
사용 하려는 라이브러리는 총 4개입니다. 행렬 처리에 필수적인 numpy, 이미지를 그리기 위한 matplotlib 이미지 로드를 위한 cv2 이외 수학 라이브러리인 math 을 사용합니다.
이미지 로드
먼저 이미지를 로드하기 위해서 cv2.imread("파일 경로")를 사용합니다. cv2 는 기본적으로 내부에서 넘파이 배열 형태를 사용하기 때문에 아래 소스코드 pn이 결국 넘파이 배열을 의미합니다.
pn = cv2.imread("aaaa7.png")
plt.imshow(pn)
px = pn.transpose(2,0,1)
pn = np.concatenate(([px[2]],[px[1]],[px[0]])).transpose(1,2,0)
angle = 5
radian = (angle/180) * 3.141592
rot = np.array([
[ math.cos(radian), -math.sin(radian) ],
[ math.sin(radian),math.cos(radian) ]
])
pn2 = np.zeros_like(pn)
for y in range(len(pn)):
for x in range(len(pn[y])):
resultMatrix = rot@[x , y ]
n_x = int(resultMatrix[0])
n_y = int(resultMatrix[1])
if(n_y < len(pn) and n_x < len(pn[y])):
if(n_x>=0 and n_y>=0):
pn2[n_y,n_x] = pn[y,x]
plt.imshow(pn2)
angle = 180
radian = (angle/180) * 3.141592
rot = np.array([
[ math.cos(radian), -math.sin(radian) ],
[ math.sin(radian),math.cos(radian) ]
])
pn2 = np.zeros_like(pn)
center_x = len(pn[0])/2
center_y= len(pn)/2
for y in range(len(pn)):
for x in range(len(pn[y])):
resultMatrix = rot@[x - center_x, y - center_y] + [center_x,center_y]
n_x = int(resultMatrix[0])
n_y = int(resultMatrix[1])
if(n_y < len(pn) and n_x < len(pn[y])):
if(n_x>=0 and n_y>=0):
pn2[n_y,n_x] = pn[y,x]
plt.imshow(pn2)