OpenCV 최신 버전에서 Python으로 SIFT, SURF 사용하기(Install OpenCV 3.0 in Ubuntu)

프로그래밍 팁 2015.11.18 16:07

 최신 버전의 OpenCV 라이브러리를 사용하여 Python 환경에서 SIFT 알고리즘을 수행하려 해보았더니 아래와 같은 화면이 출력됩니다.




 OpenCV 3.0.0 버전 이후에는 이전 버전에서 사용할 수 있었던 일부 라이브러리의 사용이 제한되어 있습니다. 자주 사용되는 SIFT와 SURF 또한 이에 해당되어 OpenCV 최신 버전을 그대로 설치하면 이를 바로 사용할 수 없습니다. 최신 버전의 OpenCV에서 이를 사용하기 위해서는 opencv_contrib을 추가적으로 설정해 주어야 합니다.


 1. OpenCV 최신 버전을 설치하기 위해 아래의 프로그램들을 설치합니다.


$ sudo apt-get install build-essential cmake git pkg-config libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libatlas-base-dev gfortran python2.7-dev


 2. Python 2.X 버전을 설치합니다. 3.X 버전의 경우 동작이 되지 않는 경우가 종종 발생한다는 점을 유의하셔야 합니다. apt-get에서는 2.X 버전을 제공합니다.


$sudo apt-get install python


 3. Python 패키지 매니저인 pip를 설치합니다.


$ wget https://bootstrap.pypa.io/get-pip.py

$ sudo python get-pip.py


 4. 기존 Python OpenCV의 라이브러리와는 별도로 동작할 수 있게 하는 virtualenv와 virtualenvwrapper를 설치합니다.


$ sudo pip install virtualenv virtualenvwrapper


 5. 설치한 virtualenv와 virtualenvwrapper가 항상 수행될 수 있도록 bash를 수정합니다.


$ vi ~/.bashrc



 6. 수정한 bashrc를 바로 적용합니다.


$source ~/.bashrc


 7. 독립된 별도의 Python OpenCV 라이브러리 환경을 만들기 위한 가상 환경을 생성합니다.


$mkvirtualenv cv


 8. 최신 버전의 OpenCV 버전을 다운로드 받아 OpenCV 폴더에 압축을 풉니다.


http://opencv.org/downloads.html


 또는 Github를 통해 최신 버전의 OpenCV 소스코드를 다운로드 받습니다.


$ cd ~

$ git clone https://github.com/Itseez/opencv.git

$ cd opencv

$ git checkout 3.0.0


 9. 이전 버전의 OpenCV 라이브러리를 사용할 수 있도록 해주는 opencv_contrib를 다운로드 받습니다.


$ cd ~

$ git clone https://github.com/Itseez/opencv_contrib.git

$ cd opencv_contrib

$ git checkout 3.0.0


 10. 이제 본격적으로 OpenCV 라이브러리를 설치해 보도록 합니다. 아래와 같이 cmake를 통해 Makefile을 구성합니다. 이 과정에서 위에서 받은 opencv_contrib을 설정해줍니다.


$ cd ~/opencv

$ mkdir build

$ cd build

$ cmake -D CMAKE_BUILD_TYPE=RELEASE \

-D CMAKE_INSTALL_PREFIX=/usr/local \

-D INSTALL_C_EXAMPLES=ON \

-D INSTALL_PYTHON_EXAMPLES=ON \

-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \

-D BUILD_EXAMPLES=ON ..


 11. 구성요소를 컴파일한 다음 자신의 환경에서 만든 OpenCV를 설치합니다.


$make -j4

$sudo make install

$sudo make ldconfig


 12. OpenCV 설치가 완료되면 이를 Python에서 사용할 수 있도록 Sym-link를 추가해 줍니다.


$ cd ~/.virtualenvs/cv/lib/python2.7/site-packages/

$ ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so


 13. 이로서 OpenCV의 설치가 완료되었습니다. cv2 라이브러리를 불러오는 것으로 실행을 확인해 봅니다.


>>> import cv2

>>> cv2.__version__



 위와 같이 자신이 설치한 OpenCV 버전이 나오면 설치는 성공한 것입니다! 이제 SIFT가 실행이 잘 되는지 확인해 보도록 합니다!


 아래 이미지에 대한 SIFT 연산을 수행하는 프로그램을 작성해 보겠습니다.



1
2
3
4
5
6
7
8
9
10
11
import cv2
import numpy as np
 
img = cv2.imread('elecs.png')
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
 
sift = cv2.xfeatures2d.SIFT_create()
kp = sift.detect(gray,None)
 
cv2.drawKeypoints(gray,kp,img,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imwrite('sift_elecs.jpg',img)
cs


- 결과




 -참고자료

http://www.pyimagesearch.com/2015/06/22/install-opencv-3-0-and-python-2-7-on-ubuntu/

http://www.flowdas.com/blog/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-virtualenv/


  • entoz 2015.11.26 17:54 ADDR 수정/삭제 답글

    안녕하세요. SIFT를 사용하기 위해 opencv 설치를 쓰신글을 참고하여 진행해봤습니다.
    헌데 모든 설치가 끝나고서 import cv2 부분에서 importError: /usr/local/lib/python2.7/dist-packages/cv2.so: undefined symbol: _ZTIN2cv12_OutputArrayE 이런 에러 메세지를 보이고 있습니다. 혹시 이부분에 대해서 제가 누락하거나 잘못한 부분이 있어서 그런건지 의견을 여쭙고자 합니다.

    • Justin T. 2015.11.26 17:57 신고 수정/삭제

      저 또한 위와 유사한 에러를 경험한 적이 있었습니다.
      제 경우 Python과 OpenCV와 관련된 모든 프로그램을 컴퓨터에서 삭제하고 처음부터 완전 새로 설치해보니 정상적으로 동작하는 것을 확인하였습니다.
      만약 이러한 과정을 거치셨음에도 실행이 되지 않으신다면 구글 검색을 통해 답을 구해보셨으면 합니다.