본문 바로가기
Daily Coding

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

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

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

안녕하세요.

해가 점점 짧아지면서 공부하기에는 더 안 좋아지는 것 같습니다.

아침에 평소 일어나는 시간에 눈을 뜨면 아직 깜깜해서 일어나기가 참 싫어지네요

저녁때는 빨리 어두워져서 왠지 서둘러 자야할 것만 같고요...

그냥 의지가 약해지는 개인적인 핑계였습니다 ㅎㅎ

 

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

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

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

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

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

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

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

 

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

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

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

 

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

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

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

 

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

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

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

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

 

오늘은 어제 배운 모 폴로지 중 열기와 닫기를 배워봤습니다. 지역 이진화 및 침식, 팽창을 통해 불필요한 노이즈를 없애는 방법을 어제 배워봤었는데, 한 가지만 반복 사용하면 노이즈와 함께 필요한 픽셀도 제거되거나, 필요한 부분을 살리기 위해 노이즈도 같이 살거나 하는 문제가 있었는데요, 그런 부분을 해결하기 위해 침식과 팽창을 번갈아 가면서 적용하는 방법이 바로 열기(침식 후 팽창)와 닫기(팽창 후 침식)였습니다.

 

어제 배운 함수를 두 번 사용하는 방법도 있는데, 이 모두를 한 줄로 정의할 수 있는 함수가 제공되고 있었습니다.

 

모폴로지: 열기와 닫기

해당 함수는

cv2.morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None) -> dst

op는 모 폴로지 연산 플래그인데, 플래그 값에 따라 침식, 팽창, 열기, 닫기, 그래디언트 등의 연산을 할 수 있습니다.

결과 영상을 보니 굉장히 깨끗한 형태의 이진화 결과를 얻을 수 있었습니다.

 

다음 이진화된 영상중 객체에 일명 라벨링을 하는 레이블링을 배워봤는데요.

이제 식별된 객체의 개수를 세어보거나 다뤄보는 초입이라고 보시면 되겠습니다.

 

레이블링

관련 함수는 객체수와 레이블을 부여하는 함수와 객체 정보를 함께 반환하는 함수, 두 가지가 있었습니다.

 

cv2.connectedComponents(image, labels=None, connectivity=None, ltype=None) -> retval, labels
cv2.connectedComponentsWithStats(image, labels=None, stats=None, centroids=None, connectivity=None, ltype=None) -> retval, labels, stats, centroids

 

connectivity는 4 또는 8이고 기본값은 8입니다.

stats는 각 객체의 바운딩 박스, 픽셀 개수 정보를 담은 행렬인데요 numpy.ndarray.shape =(N,5), dtype=numpy.int32 형태입니다.

centroids는 각 객체의 무게중심 위치 정보를 담은 행렬이며, numpy.ndarray, shape=(N,2), dtype=numpy.float64입니다.

ltype은 labels 행렬 타입인데 cv2.CV_32S 또는 cv2.CV_16S입니다.

 

결과 영상을 보면 각 객체(문자열)를 사각 박스로 감싸고 있는 모습이 나옵니다.

이번 예제에서는 노이즈를 픽셀 크기로 그냥 강제 제거해버렸지만, 

대부분은 침식/팽창 모 폴로 지를 사용하면 될 것 같습니다.

 

앞으로는 깜깜한 아침저녁에 익숙해져야겠어요

평소보다 늦게 출근해버렸네요 ㅎ

 

그러면 모두 부지런한 하루 보내세요~~

 

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

 

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

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

www.fastcampus.co.kr

 

댓글