본문 바로가기

Programming/image processing

우분투(리눅스) ubuntu 8.10 openCV 2.0 설치하기

자료들을 찾아보면
역시 setup.exe 파일만 딱 눌러서 깔던 윈도우랑은 달라서 설치하기가 조금 까다롭다


http://opencv.willowgarage.com/wiki/InstallGuide_Linux

여기 있는 자료로만 깔려고 하면 각 종 리눅스마다 설정이 틀려질 수 가 있는데
그에 대한 구체적인 설명을 따로 찾아 들어가야만한다.

일단 기본설정들을 보면

1. Getting OpenCV source code from the repository
2. Compilation
3. Path Configuration
4. Test OpenCV

하지만, openCV를 수행해보기에 앞서 몇가지를 깔아주여야 한다.

0. 환경구축
이라고 해주자

그 명령어를 참고한 곳은
http://ttti07.egloos.com/3524657 
오뉴월엿가락님의 블로그를 참조~

1. 필요한 패키지들을 설치명령어
sudo aptitude install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg62-dev libtiff4-dev build-dep libswscale-dev swig

요즘 이 명령어를 써서 생성을 많이 한다
우분투에 안 깔려 있으면 깔아 줘야 한다.
sudo apt-get install cmake


2. 다운 받아서 풀기
http://sourceforge.net/projects/opencvlibrary/
아시는 분들은 아시겠지만 tar 명령어 안써도 그냥 받은 다음 풀마우스 오른쪽 클릭으로
풀었기에 명령어 생략...아무때나 깔아도 됩니다.


3. 깔기에 앞서 ffmpeg를 깔아야 한다
http://ffmpeg.mplayerhq.hu/download.html에사 받을 수 있다.
이 프로그램은 LGPL을 따르기 때문에 GLP 소프트웨어가 아닌 OpenCV와 함꼐
사용하기 위해서는 ffmpeg 공유 라이브러리를 새로 빌드 해주어야 한다.
하지만, 우분투에 보니까 깔려 있었다. 동영상 어떤거 돌리다가 알아서 깔아버린듯... -0-;
그래서 이번에 링크만 살짝 걸어주어 보았는데 아래 과정이 필요 없을 지도 모르겠다.

sudo mkdir /usr/include/ffmpeg
sudo ln -s /usr/include/libavcodec/avcodec.h /usr/include/ffmpeg/avcodec.h
sudo ln -s /usr/include/libavformat/avformat.h /usr/include/ffmpeg/avformat.h
sudo ln -s /usr/include/libavformat/avio.h /usr/include/ffmpeg/avio.h
sudo ln -s /usr/include/libavutil/avutil.h /usr/include/ffmpeg/avutil.h
sudo ln -s /usr/include/libswscale/swscale.h /usr/include/ffmpeg/swscale.h

참조: http://junichel.tistory.com/entry/ubuntu에-OpenCV-20-설치하기
 

4. 그 다음 해줄 것은 openCV 압축푼 폴더에 가서
저같은 경우에는 /desktop/OpenCV-2.0.0

%이 과정에서 IPP 설정을 해줘서 IPP를 설치하냐 마냐 해야 하는거 같다.
몇몇 부분을 건드려서 해야하지만 IPP가 항상 최적화 해주는건 아니기에
일단 깔지 않고 건너 뛰고 했다. 추후에 필요할 때 다시 조사해서 포함하도록 해야지. ㅎㅎ
거기에 IPP는 상용이다. ㅠㅠ

./configure
cmake .
sudo make install

cmake가 상당히 시간을 잡아 먹었고 이렇게 하면 기본적인 것들이 깔린다

5. 라이브러리 path설정

cd /etc/ld.so.conf.d/
로 이동해서 opencv.conf를 만들어 준다.
sudo vim opencv.conf
그런다음 라이브러리 위치를 추가해주어야 한다.
라이브러리 위치를 알아내는 방법은 
$ pkg-config opencv --libs
요 명령어를 치면된다.

결과는
-L/usr/local/lib -lcxcore -lcv -lhighgui -lcvaux -lml
이렇게 나오더라.

고로 opencv.conf 파일에
/usr/local/lib
요것만 넣어주자.

그런다음 라이브러리 추가 명령어
ldconfig -v
이거 안해주면 컨파일 한다음 프로그램 실행할 때 라이브러리가 없다고 뜬다
예) ./test: error while loading shared libraries: libcv.so.2.0: cannot open shared object file: No such file or directory

테스트를 위한 코드는
http://warnus.tistory.com/360
이 블로그에 있는 코드를 통해 테스트 해보았다

*********************************************************

#include <stdio.h>

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

int main()
{
        double low_threshold = 0.0;
        double high_threshold = 70.0;

        IplImage *src_image;
        IplImage *gray_image;
        IplImage *canny_edge;
        IplImage *dst_image;

        char *lena = "test.jpg";      // 이 이미지는 테스트 프로그램 소스와 같은 위치에 있어야함
        char *new_lena = "test_new.jpg";  // 새로 생성되는 이미지

        src_image = cvLoadImage( lena, CV_LOAD_IMAGE_COLOR );
        if( src_image->nChannels != 3 )
        {
                printf("[ERROR] 컬러 영상이 아닙니다!\n");
                return -1;
        }

        gray_image = cvCreateImage( cvGetSize(src_image), IPL_DEPTH_8U, 1 );
        cvCvtColor( src_image, gray_image, CV_BGR2GRAY );

        canny_edge = cvCreateImage( cvGetSize(src_image), IPL_DEPTH_8U, 1);
        dst_image = cvCreateImage( cvGetSize(src_image), IPL_DEPTH_8U, 1);

        cvCanny(gray_image, canny_edge, low_threshold, high_threshold, 3);
        cvConvertScaleAbs(canny_edge, dst_image, 1, 0);

        cvSaveImage(new_lena, canny_edge);

        cvReleaseImage(&src_image);
        cvReleaseImage(&gray_image);
        cvReleaseImage(&canny_edge);
        cvReleaseImage(&dst_image);

        printf("[SUCCESS] 잘 수행되었습니다!\n");

        return 0;
}


-------------------------------------------------------------------

다음과 같은 코드를 .cpp로 저장해주고


원본 이미지

생성된 이미지


컴파일
sudo g++ -o test test.cpp -I/usr/local/include/opencv -L/usr/local/lib -lcv -lhighgui
해주면 실행파일인 test가 생성된다.

실행하기
./test
로 해주면 위와 같은 결과가 나온다.
opencv 테스트 성공!

컴파일용 쉘파일 만들기
위와 같이 컴파일 할려면 늘 명령어를 넣어 주어야 하기 때문에 불편하다.
그래서 컴파일을 간단히 하기 위해 쉘을 하나 짜주면 되게 편하다.
일단 root 계정이 편하니까
sudu -s  // root계정
vim run.sh
#! bin/sh       //본쉘사용
g++ -o test $1 -I/usr/local/include/opencv -L/usr/local/lib -lcv -lhighgui -lcvaux
위쪽 내용만 저장하고 종료

그런후 run.sh 파일 속성을 변화 시켜주고... 간단하게
chmod 777 run.sh
그런후
./run.sh test.cpp
컴파일할 파일명만 넣어주면 쉽게 컴파일 할 수 있다.