[라즈베리파이 강좌] OpenCV 예제 5. OpenCV 기본

메카 2017-11-20 (월) 23:05 6년전 6365  

 

라즈베리파이 강좌

  OpenCV 예제 5. OpenCV 기본




  안녕하세요. 메카솔루션 알도입니다.

  지난 번에 힘겹게 라즈베리파이에 OpenCV를 설치해보았는데요. 이번 주에는 OpenCV를 어떻게 사용하는지 알 수 있도록 제공한 샘플들을 살펴보도록 하겠습니다.


 


  세상에는 좋은 라이브러리들이 참 많은데요. 사실 라이브러리를 만드는 것도 고되지만, 만든 후에 사용 방법을 정리하는 것도 만만치 않게 힘든 일입니다. 그래서 이런 사용 방법이 잘 정리되어 있지 않아 코 앞에 두고도 사용하지 못하는 라이브러리들이 참 많습니다. 다행이 OpenCV는 사용 방법이 매우 잘 정리되어 있고, 다양한 예제까지 제공하고 있습니다.

 


 

     OpenCV basic



  시작하기 전

  아직 OpenCV를 설치하지 않으신 분들은 아래 링크를 참조하시기 바랍니다.

http://blog.naver.com/roboholic84/221139256044


  설치하는데에는 상당한 시간과 노력이 소요됩니다. 거의 저녁 혹은 퇴근 1시간 전 쯤에 시작하고 다음 날 확인하는 것이 가장 현명한 선택이라고 할 수 있겠습니다.

  만약 아직 라즈베리파이와 SD카드를 준비하지 않으셨거나, 여유가 안되시는 분들은 저희 메카솔루션에서 라즈비안 최신 버전에 OpenCV 3.3.0이 설치완료되어있는 SD카드를 판매 중이오니 관심 가져주시면 감사하겠습니다.

http://mechasolution.com/shop/goods/goods_view.php?goodsno=543841&category=046


  아직 카메라가 없으시다면 메카솔루션에서 라즈베리파이용 카메라를 구매하실 수 있습니다.



OpenCV 기본

  잠시 OpenCV와 영상처리에 대해 정리를 해보고자 합니다. 아직 영상처리라는 것에 대해 막연하신 분들이 많을 텐데요. 영상을 잘 다루려면 배열과 행렬에 대해서 잘 알아야 합니다. 왜냐하면 영상이 곧 배열이기 때문이죠. 영상처리를 하다보면, 영상을 자르고 붙이고, 늘리고 줄이고 해야할 때가 많은데 배열을 잘 다루지 못하면 이런 작업이 매우 고되고 어려울 수 있습니다. 역으로 영상처리를 하면서 배열을 다루는 능력이 매우 발전할 수도 있습니다.


  그 다음으로는 영상처리의 접근 방법이 될 수 있는데요. 거창하게 기계 학습이나 인공 지능 같은 것도 있지만, 간단한 사칙연산이나 이진화 등으로도 훌륭한 영상처리 프로그램을 만들 수 있습니다.


  영상처리가 어려운 첫번째 이유는 3차원(동영상이면 시간까지 포함해서 4차원)으로 된 세계를 2차원에 투영한 영상이라는 단편적인 정보로 3차원 세계의 내용을 알아내야 하기 때문입니다. 같은 물건이라도 가까이에서 찍으면 크게 나오고, 멀리서 찍으면 작게 나오는데, 그것이 작거나 커서 그런 것인지, 가깝거나 멀어서 그런 것인지 알기 어렵기 때문이죠.


(오달수님 죄송합니다. ㅠㅠ)


  두번째는 빛과 반사라는 물리적인 문제입니다. 우리가 눈으로 보는 세상은 빛의 근원인 광원이나 그 빛이 사물에 반사된 빛이 우리 눈에 들어온 것인데요. 가령 하얀 물건이 있을 때 빛의 밝기에 따라 다양한 회색이 되는데, 그 원래의 색상이 흰색인지 알기가 어렵다는 것입니다. 아래의 이미지를 한번 보시겠습니다.


 


  우리에게는 지능이라는 것이 있어서 A는 검은색, B는 흰색이라는 것을 압니다. 하지만 위 이미지에서 A와 B의 색상 값은 같다고 나옵니다. 즉 우리는 당연히 다른 색이라고 인지하는데, 컴퓨터는 그런 능력이 없기 때문에 값만 비교하여 같은 색이라고 하는 것입니다.



영상 처리

  기본적으로 사람이 영상에 대해서 분석하고 이해해서 해결책을 만드는 것입니다. 초보자들이 직접 만들 수 있는 것도 있고, 전문가들이 만든 라이브러리를 사용하는 경우도 있습니다. 사실 전문가도 만들기가 쉽지는 않습니다. 제대로 된 라이브러리를 만들어서 배포한 사람들은 전문가 중에서도 상당히 존경을 받는 수준이라고 할 수 있습니다.



Lucas와 Kanade 박사가 만든 영상내에서 변화와 움직임을 추적하는 Lucas-Kanade 알고리즘


 

  영상에서 다른 부분과 구별되는 특이점을 찾고 매칭시켜주는 SIFT 알고리즘


기계 학습

  영상 처리가 사람이 영상을 이해하고 분석해서 만든 알고리즘이라면, 기계 학습은 기계가 영상을 이해하고 분석하여 자체적으로 알고리즘을 만드는 것입니다. 대표적으로 뉴럴넷(인공신경망; Artificial Newral Network)라는 것이 있습니다. 기계에게 학습을 시키려면 먼저 학습시키고자 하는 영상에 대한 데이터 베이스가 있어야 합니다. 얼굴 인식을 하려면 다양한 상황에서 다양한 사람의 얼굴을 촬영한 이미지 데이터 베이스가 필요합니다. 그리고 이것들을 얼굴이 아닌 이미지들과 함께 뉴럴넷에 입력하면, 뉴럴넷이 알아서 어떻게 얼굴과 얼굴이 아닌 것들을 구별하는지 이해하고 학습합니다. 


 

뉴럴넷의 구조와 이미지의 특징을 추출하여 얼굴 등을 인식하는 과정


  기계 학습과 영상 처리의 차이를 둔다면, 서로의 장점이 단점이되고, 단점이 되게 됩니다. 영상 처리는 알고리즘의 하나하나를 사람이 이해하고 만들기 때문에 효율을 높일 수 있습니다. 단점으로는 사람이 이해를 할 뿐 아니라 논리/수학적으로 정리를 할 수 있어야 하기 때문에 만들기가 어렵고, 무엇보다 사람이 논리/수학적으로 정리할 수 없는 문제는 해결할 수 없다는 것입니다.

  반대로 기계 학습은 당장 사람이 이해하고 정리할 수 없더라도 이미지 데이터 베이스만 있다면 누구나 쉽게 프로그램을 만들 수가 있습니다. 하지만 뉴럴넷은 자체 알고리즘을 이용해 시키는대로 분석을 할 뿐이지 그 실체는 잘 모르기 때문에 불필요한 분석도 많이 해서 효율성이 떨어지게 됩니다. 또한 성능을 높이기 위해 방대한 데이터 베이스를 수집해야 한다는 점 역시 단점이라고 할 수 있습니다.


  그 효율성이 떨어지는 문제와 그 외에 아래 링크에 잠깐 정리되어 있는데, 뉴럴넷의 다층화와 고도화가 2006년도까지 해결이 안되어서, 학계에서 다소 외면을 받아왔었습니다.

http://blog.naver.com/roboholic84/221099591829


  하지만, 컴퓨터 기술의 발전으로 이제 누구나 쉽게 GPU를 활용하거나 GPU가 장착된 서버를 대여해서(Google Cloud) 뉴럴넷을 사용하거나 개발할 수 있게 되었고, 뉴럴넷의 고도화도 해결되어서 이제는 점점 더 다양한 분야에서 뉴럴넷을 사용하고 있습니다.

 
 
메카리워즈 Image Map

크크다스 2018-06-16 (토) 12:32 5년전
수고하십니다 제가중국에있는데. 라즈베리 opencv카드를사서설치했어요
카메라를 검사공정에쓰려고합니다 어떻게  구성해야하는지요
주소
크크다스 2018-06-16 (토) 12:37 5년전
taspistill-o output해서사진은모니터에잠깐출력됩니다
source~/.profile하면not found나옴
주소

모바일 버전으로 보기