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/


300x250

File System 및 커널 수정을 gedit로 쉽게 하는 방법(sudo root 권한으로 gedit 실행)

공대생의 팁 2015. 11. 16. 00:16

 리눅스를 사용하는 여러분들께서 최상단 폴더인 root 파일을 수정하실 때 어떻게 하시는지요? 가장 쉬운 방법으로 vi가 있을 것입니다. GUI가 없는 server 버전의 리눅스에서는 vi만이 거의 유일한 editor 수단으로 활용되고 있다고 봐도 무방할 정도로 vi는 linux 사용자에게 있어 뗄레야 뗄 수 없는 프로그램이지요. 하지만 vi의 최대 단점으로 일일히 단축 명령어를 이용해야 하다 보니 초보자가 사용하기에는 직관적이지 못해 사용하기가 상당히 불편하다는 점이 있습니다.

 물론 GUI 환경의 Desktop 버전을 사용하는 분이시라면 gedit라는 vi보다는 매우 편한 편집기가 있어 상당히 애용하다시피 하는데 막상 gedit로 루트 상단에 있는 파일을 수정할 수 없다는 치명적인 단점이 있습니다. 이 녀석을 마치 sudo 권한으로 root 상태에서 작업을 수행할 수 있다면 참 편할텐데 말이지요...



 정말 다행이게도 gedit를 root 권한을 사용하여 파일을 수정할 수 있는 방법이 존재합니다. 바로 gksu 명령어를 사용하는 방법입니다! 일반적으로 Terminal에서 root 권한을 얻어서 실행되는 프로그램의 경우 sudo를 사용합니다만 gui를 기반으로 하는 프로그램의 경우 gksu를 사용하면 마치 sudo와 같이 root 권한을 부여하여 root 파일을 수정할 수 있도록 권한이 설정됩니다.


$ gksu gedit &


 위와 같은 명령어를 수행하면 gedit를 root 모드에서 수행하는 것이 가능하여 최상단 / 에 있는 파일들을 자유롭게 수정할 수 있게 됩니다!




300x250

Android Studio로 improt 한 후 컴파일 타겟 변경하기(failed to find target with hash string ...)

 최근 안드로이드 스튜디오로 건너온 이래로 차근차근 Eclipse에서 사용하던 project 들을 옮기고 있습니다. 그러던 중 몇몇 프로젝트의 경우 아래와 같은 에러가 발생하더군요.


Error : Cause : failed to find target with hash string 'android-15'


 이는 기존에 Eclipse 에서 사용하던 프로젝트가 Android Studio로 건너왔을 때 해당 버전에서 설정한 컴파일 sdk 버전이 없을 경우 위와 같은 에러가 발생합니다.



 해결 방법으로는 2가지의 경우가 있습니다.

1. 해당 Target에 해당하는 안드로이드 버전을 SDK Manager를 실행하여 다운로드 받는다.

2. 컴파일 버전을 자신의 SDK Manager가 가지고 있는 버전으로 변경합니다. 변경 방법은 아래와 같습니다.


자신의 프로젝트 폴더 -> app -> build.gradle


 해당 Gradle에서 compileSdkVersion을 변경해주면 프로젝트가 정상적으로 동작됨을 확인하실 수 있습니다.



300x250