본문 바로가기
OpenCV

OpenCV - 이미지의 이동 및 회전

by winston1214 2020. 10. 10.
반응형

cv2를 통한 이미지의 이동은 행렬식으로 표현이 된다.

아주 기본적인 원리만 설명하겠다.

translation matrix

이는 translation matrix이다. tx와 ty의 값을 이용하여 이동을 한다.

행렬곱을 모르는 사람을 위해 그냥 결과만 끄적여본다면 

x' = (1*x)+0*y+t_x*1 = t_x+x이다. 기본적으로 알 것이라 생각한다.

코드를 통해 이미지 이동을 알아보겠다.

img = cv2.imread('img/input.jpg')
num_rows,num_cols = img.shape[:2]
translation_matrix = np.float32([[1,0,70],[0,1,110]])
img_translation = cv2.warpAffine(img,translation_matrix,(num_cols,num_rows),cv2.INTER_LINEAR) # 열,행 순서로
# 열(열이 있는 방향은 가로)
# 행(행이 있는 방향은 세로)
# warpAffine : 영상에 적용하기 위한 함수(이동 matrix를)
cv2.imshow('Trans',img_translation)
cv2.waitKey()
cv2.destroyAllWindows()

translation_matrix에서 알 수 있듯이 tx = 70, ty = 110 이다. 헷갈릴 수 있는 것이 왜 ty가 아래쪽으로 움직이는 가에 대한 것이다. 

위는 세미나 발표 자료인데 이를 직관적으로 설명한 것이다. 사진의 맨 왼쪽 위의 좌표는 (0,0)이고 이를 기준으로 x로 70만큼 y로 110 만큼 모서리가 이동한 것이다. 

 

- 이미지의 회전

img = cv2.imread('img/input.jpg')
num_rows,num_cols = img.shape[:2]
rotation_matrix = cv2.getRotationMatrix2D((num_cols/2,num_rows/2),30,0.7) # 가운데를 중심점으로 30도 돌리고 스케일 요소 0.7
img_rotation = cv2.warpAffine(img,rotation_matrix,(num_cols,num_rows))
plt.imshow(cv2.cvtColor(img_rotation,cv2.COLOR_BGR2RGB))
plt.show()

 

이미지의 행과 열의 길이를 저장한 다음에 getRotationMatrix2D로 가운데를 중심점(col/2,row/2)으로 30도를 돌리는 것이다. scale은 회전하는 이미지의 크기를 배수 만큼 보이게 한다. scale = 0.7 이므로 원래 크기의 0.7배의 크기이다.

 

- 이미지의 이동 + 회전

지금까지 소개한 함수를 이용하여 이동과 회전을 동시에 적용해보자. 

img = cv2.imread('img/input.jpg')
num_rows,num_cols = img.shape[:2]
translation_matrix = np.float32([[1,0,int(0.5*num_cols)],[0,1,(0.5*num_rows)]]) # 이동 matrix
rotation_matrix = cv2.getRotationMatrix2D((num_cols/2,num_rows/2),30,1) # 회전 matrix
img_translation = cv2.warpAffine(img,translation_matrix,(2*num_cols,2*num_rows)) # 이동 적용
img_rotation = cv2.warpAffine(img_translation,rotation_matrix,(2*num_cols,2*num_rows)) # 이동한 사진 회전
plt.imshow(cv2.cvtColor(img_rotation,cv2.COLOR_BGR2RGB))
plt.show()

translation_matrix : 이미지의 가운데로 중심점 이동

rotation_matrix : 가운데 중심점에서 30도 이동

img_translation : 이동 적용

img_rotation : 이동 적용한 이미지에 rotation 적용

 

 

Full-code = github.com/winston1214/OpenCV/tree/master/prac_opencv

 

winston1214/OpenCV

Study to Object Detection. Contribute to winston1214/OpenCV development by creating an account on GitHub.

github.com

-> 스타 한번씩 부탁드립니다.

 

반응형

댓글