본문 바로가기
Daily Coding

[패스트캠퍼스 수강 후기] {컴퓨터비전인강} 100% 환급 챌린지 - 16일차

by 브래드(Brad) 2020. 11. 3.

OpenCV를 활용한 컴퓨터비전과 딥러닝

안녕하세요.

오늘은 다시 날씨가 정말 맑아졌습니다.

아침에 해 뜰 무렵 붉은 하늘 색깔이 너무 이쁘더라고요.

대신 어제보다 한층 추워진 듯합니다.

아침 출근길이 추우면 일어나기도 싫어지는데, 벌써부터 걱정이네요. ㅠ

 

코딩 공부를 시작하게 된 배경을 다시 언급하자면,

인공지능이 앞으로 세상을 지배할 거라는데, 기계와 소통을 위해 코딩은 점점 필수 능력이 되어가는 것 같습니다.

파이썬으로 공부하면 쉽다는데, 왜 이렇게 어렵게 느껴지는 걸까요???

혼자 너튜브로 공부하려다 보니 두서없이 따라 하기만 하고, 정작 제가 하고 싶은 건 만들지 못하게 되는 것 같습니다.

아마도 제가 더 노력하지 않아서겠지요.

저는 뭔가를 할 수밖에 없는 환경에 놓여야만 움직이는 DNA를 가지고 있는 것 같아요

그래서 투자를 하고 본전심리가 장치가 되어 어쩔 수 없이 실행하게 만드는 유료수강제도를 이용하게 되는 것 같습니다.

 

요새 같은 코로나 시대에는 학원에 가기도 그렇고, 사람마다 이해도나 기본 실력이 다르니 수준이나 진도를 제가 정할 수 있는 온라인 교육이 좋은 것 같습니다.

FastCampus의 교육들은 커리큘럼들도 잘 짜여 있고, 한번 결제하면 평생 소장이 가능하다고 해서 종종 이용하고 있는데요.

이번에는 미션 수행하면 수강료 환급해주는 과정이 생겨서 도전해보기로 했습니다.

 

이번에 도전한 과정은 "OpenCV 를 활용한 컴퓨터 비전과 딥러닝"인데요.

마침 제가 요새 회사에서 추진하고 있는 프로젝트가 "지능형 CCTV 구축"과 관련된 것이어서,

관련 기술도 배울 겸 신청하게 되었어요

 

수강신청 후 환급 미션이 시작되기 전까지는 약간 시간이 있어서 Chapter 1 은 쉬엄쉬엄 들어봤는데요.

FastCampus 강의들의 장점은 영상 1개당 강의시간이 길어도 25분을 넘기지 않고 대체로 10분 안팎이어서

수강에 큰 부담이 없다는 것입니다.

문제는 본인이 꾸준히 하느냐에 대한 것인데 평생 소장이니 의지가 다시 타오를 때 또 보면 되죠 뭐...ㅋ

 

오늘은 기하학적 변환의 회전과 투시 변환에 대해 배워봤습니다.

회전의 경우 앞 시간에 배운 좌표 이동 함수를 사용해서 Sin, Cos 좌표 이동으로도 가능했는데,

이경우 중심 좌표가 변하지 않는 문제가 있더라고요.

 

그래서 중심점을 이동하면서 회전하기 위해 변환 행렬 값을 먼저 구해야 했습니다.

변환 행렬을 구하기 위한 함수는

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

center는 회전 중심 좌표로 (x, y) 튜플

angle 은 반시계 방향 각도이고,

scale 은 확대 비율입니다. 1인 경우 원본 사이즈와 동일합니다.

결괏값인 retval 은 2x3 행렬로 실수형입니다.

 

이 값을 가지고 cv2.warpAffine(src, rot, (0,0)) 을 하면 중심점도 함께 이동하는 회전 영상이 만들어집니다.

 

투시 변환의 경우 기존의 어파인 변환과 다른 점은 어파인 변환은 3개의 점을 움직이고, 투시 변환은 4개 모두 움직인다는 것이었습니다. 그래서 어파인 변환은 2x3 변환행렬이, 투시변환은 3x3 변환 행렬이 필요했습니다.

핸드폰 카메라를 이용한 스캔 프로그램들이 투시 변환을 활용하여 약간 대각으로 사진이 찍혀도 스캔한 것처럼 직사각형을 맞춰주는 기능이 바로 투시 변환이었네요.

 

투시 변환 역시 변환 행렬 값을 얻기 위해

cv2.getPerspectiveTransform(src, dst, solveMethod=None) -> retval

src는 4개의 원본 좌표점이고 numpy.ndarray.shape=(4,2) 형태입니다.

dst는 4개의 결과 좌표점, 역시 numpy.ndarray.shape=(4,2)입니다.

retval 은 3x3의 행렬 형태로 반환하네요.

 

투시 변환을 하기 위해서는 위에서 얻은 변환 행렬값을 어파인 변환 함수가 아닌 투시변환 함수에 대입해줘야 합니다.

cv2.warpPerspective(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None)->dst

여기서 M이 위에서 얻은 변환 행렬 값이고,

dsize는 결과 영상의 크기로 (0,0)이면 원본과 같은 크기로 설정됩니다.

flags는 보관법입니다.

 

이번 강의에서는 간단하게 원본의 모서리 좌표를 알고 있다고 가정한 상태에서 실습을 진행했는데, 모서리 검출까지 배우면 간단한 스캔 프로그램 하나는 만들 수 있겠네요 ㅎㅎ

 

그럼 오늘 하루도 즐거운 하루 보내세요~~~ ^^

 

 

강의 링크: https://bit.ly/2DBM8d4

 

OpenCV를 활용한 컴퓨터비전과 딥러닝 올인원 패키지 Online. | 패스트캠퍼스

황선규 박사에게 배우는 컴퓨터 비전과 딥러닝. 고급 알고리즘의 원리를 제대로 이해하고 수십 가지의 실습을 통해 내 것으로 만드세요.

www.fastcampus.co.kr

 

 

댓글