Program/OPEN_CV

[Open CV] 기하학적 변환 _ 영상의 회전

사막여유 2022. 5. 25. 22:44
728x90

 

 - 회전변환 ( rotation transformation ) 이란?

   영상을 특정 각도만큼 회전시키는 변환 ( 반시계 방향 )

 

영상을 회전해야할 경우는 자주 발생하는데

어떤 문서 이미지를 OCR 인식할 경우 문서들이 똑바로 스캔이 되어있어야지만 OCR 성능이 좋아지기때문에

영상이 회전되어있을 경우 바른 각도로 기울일때 자주 필요하다.

 

 

 

영상을 회전하기 위한 수식으로는 위 처럼 cos 함수와 sin 함수로 이루어져 있는데 

x,y 좌표를 반시계 방향으로 세타만큼 회전시킬때 위 수식을 대입시키면 x ' , y ' 의 결과값을 만들 수 있다.

 

 

위 함수를 보게되면 rad은 20도에 해당하는 값을 radian 으로 변환한 변수이고아까 공식에서 나온대로 cos 과 sin 함수를 행렬로 만들어준다. ( aff )그리고 warpAffine 함수에 대입해주면 반시계방향으로 20도 돌아간 이미지가 출력되게 된다. ( * 반대는 음수값을 넣어주면 된다 )

 

 

위처럼 반시계 방향으로 돌아가긴 하지만 영상의 중심좌표가 아닌 ( 0 , 0 )을 기준으로 돌아간것을 볼 수 있다.따라서 입력영상의 중심점 좌표를 기준으로 잡는 cv2.getRotationMatrix2D의 함수를 사용하면 쉽게 중심좌표를 기준으로 회전시킬 수 있다.

 

 - cv2.getRotationMatrix2D ( center, angle, scale ) -> retval

   center : 회전 중심 좌표 ( x, y ) 튜플   angle : ( 반시계 방향 ) 회전각도 ( degree ) *음수는 시계방향   scale : 추가적인 확대비율 ( 회전과 동시에 영상을 키우거나 줄이는 변환 )   retval : 2x3 어파인 변환 행렬 ( 실수형 )

 

위 함수를 사용한 예제를 보게되면

 

 

위 예제코드의 결과영상을 보게되면 

 

위 영상처럼 입력영상의 중심점을 기준으로 출력영상이 회전되는 것을 볼 수 있다.

 

회전의 내부 알고리즘을 살펴보자.일단 입력영상의 Center Point 를 계산하여 불러온 뒤 원점 ( 0, 0 )으로 이동변환 시킨다.이후 원점을 중심으로하여 회전 변환한 뒤 다시 Center Point 만큼을 이동변환시켜 영상을 출력시킨다.

 

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

728x90