본문 바로가기
Daily Coding

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

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

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

안녕하세요~

어제는 약속한 대로 단풍놀이를 다녀왔습니다.

약간 끝물이긴 했지만 그래도 다녀왔다는 데에 의의를 두고

모처럼 콧바람 좀 쐬었네요.

돌아오는 길은 다소 이른 시간이긴 했지만 막힐 수 있다는 촉을 믿고 다른 길로 돌아왔는데

더 막히더군여 ㅠ

1시간 반이면 올 길을 두 시간 걸려서 왔어요 ㅠㅠ

 

자 그럼 다시 기운내서 코딩 공부 시작입니다. 

 

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

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

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

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

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

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

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

 

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

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

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

 

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

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

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

 

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

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

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

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

 

오늘은 어제배운 이진 영상 처리의 문제점, 즉 조명에 따른 이진화 문제점을 해결하기 위해

지역 이진화라는 것을 배워봤습니다.

지역 이진화는 전체 영상에 대해 일정 Threshold 값을 주어 이진화하는 방법이 아닌

일정 크기의 kernel을 이용해서 이진화하는 방법으로 픽셀의 위치 별로 다르게 threshold 값을 주는 방법이었습니다.

 

지역이진화

관련 함수는

cv2.adaptiveThreshold(src, maxValue, adativeMethod, thresholdType, blockSize, C, dst=None) -> dst

maxValue는 임계값 함수 최대값이고 보통 255입니다.

adaptiveMethod는 블록 평균을 계산하는 방법을 지정하는 것이며, cv2.ADAPTIVE_THRESH_MEAN_C는 산술평균, cv2.ADAPTIVE_THRESH_GAUSSIAN_C는 가우시안 가중치 평균입니다.

thresholdType 은 cv2.THRESH_BINARY 또는 cv2.THRESH_BINARY_INV로 지정하고

blockSize는 3 이상의 홀수여야 합니다.

C는 블록 내 평균값 또는 블록 내 가중평균값에서 뺄 값을 지정합니다.

 

다음으로 모 폴로지에 대해 배워봤는데요, 모 폴로 지라는 것은 영상을 형태학적인 측면에서 다루는 기법이라고 합니다.

그중 침식(erosion)과 팽창(dilation)을 배워봤는데, 간단히 침식은 객체 크기 감소, 배경 확대/ 팽창은 객체크기 확대, 배경 감소되는 연산이라고 보시면 됩니다.

 

모폴로지: 침식과 팽창

관련 함수는 

침식: cv2.erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None) -> dst
팽창: cv2.dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None) -> dst

kernel은 구조 요소이며 뒤에 나오는 getStructuingElement() 함수로 생성 가능합니다. None을 지정하면 3x3 사각형 구성요소를 사용한다고 합니다.

anchor는 고정점 위치, 기본값(-1, -1)을 사용하면 중앙점을 사용합니다.

iteration 은 반복 회수로 기본값은 1입니다.

 

커널을 생성하는 함수는

 cv2.getStructuingElement(shape, ksize, anchor=None) -> retval

shape 은 구조 요소 모양을 나타내는 플래그

ksize는 구조 요소 크기

결과 값은 0과 1로 구성된 cv2.CV_8UC1 타입 행렬이라고 합니다.

 

오늘 예제는 개념적으로 이해하기가 좀 어렵네요

어제 의외의 장시간 운전으로 너무 졸리기도 했고요 ㅋ

 

그럼 오늘 하루 졸리지 않은 상쾌한 하루 보내시길~~~

 

 

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

 

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

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

www.fastcampus.co.kr

 

댓글