• 이번에는 소스 파일이 여러개일때를 생각해보자.


/*

*    filename : message.c

*/

#include <stdio.h>

void goodbye_world(void)

{

        printf("Goodbye, World ! \n");

}


/*

*    filename : main.c

*/

#include <stdio.h>

void goodbye_world(void);

int main(int argc, char **argv)

{

        goodbye_world();

        exit(0);

}


  • 위와 같이 소스파일이 2개가 있을경우를 생각하자.
  • 여기서 두가지 방법이 있다.
  • 첫번째 방법은 각각 파일을 컴파일 및 어셈블리 변환을한다.( 링크는 하지 않는다. ) 그 이후 링크로 연결한다.
  • 이후 생성되는 .o 는 gcc의 산물이다.
$ gcc -c message.c
$ gcc -c main.c
$ gcc -o goodbye message.o main.o
$ ./goodbye
  • 두번재 방법은 두개의 파일을 한번에 한다.
$gcc -o goodbye message.c main.c
$ ./goodbye

  • 이렇게 보니깐... 두번째 방법이 쉬워 보인다. ㅋ
  • gcc 에서 '-c' : Compile and assemble, but do not link 이다.



  • gcc로 컴파일해서 어플리 케이션을 작동시켜 보자.
  • 역시 처음에는 "Hello, World!" 출력이 가장좋은것 같다.

  • 일단 소스를 입력을 하기 위해서 파일을 해서한다.
$ vi hello.c
  • 소스를 작성하기 위해서 'i'를 클릭후 소스를 입력한다. 
  • 소스는 아래와 같다.

/*

*       Professional Linux Programming - Hello World

*/


#include <stdio.h>

#include <stdlib.h>


int main( int argc, char **argv )

{

        printf( "Hello, World! \n");

        exit(0);

}

"Professional Linux Programming" 책에서 가져왔다.


  • 소스 작성을 종료하고 파일을 닫기 위해서 다음과 같이 입력한다.
$ shift + ":" 
$ wq
  • 마무리로 "Enter" 키를 누른다.
  • 그렇게 하면, 소스를 입력하기전 화면으로 복구가 된다.
  • 이제 소스를 컴파일 하기 위해서 다음과 같이 입력한다.
  • ( 여기서, gcc로 컴파일로 하며 설치되어 있다고 가정한다. )
$ gcc -o hello hello.c
$ ./hello

  • Hello, World 가 출력되는것을 확인 할 수 있다.
  • 여기서 gcc 옵션 '-o'가 궁금하면, 다음과 같이 입력해서 확인해 보자.
$ gcc --help

  • 여기서,
  • -o <file>    Place the output into <file>
  • 이라고 나와있다.


소스는 아래와 같다.<접기 or 펼치기 참조>


  • 배경(BgImg)와 현재 입력 이미지의 픽셀 차 값이 fgThreshold 이상인 것만 우믹이는 물체로 본다.
  • 영상 분야에서 움직이는 물체를 구분하는 방법중 가장 쉬운 방법이기도 하다.
  • 초기 값으로 다음과 같다.
    • fgThreshold    = 16
    • minBlobSize    = 0
  • OpenTLD 기본 설정에서는 ForegroundDetector를 사용하지 않는다.
  • DetectionResult *detectionResult는 왜 있지???



'STUDY > OpenTLD' 카테고리의 다른 글

[Class]Main  (0) 2014.04.01
main  (0) 2014.04.01
설치  (0) 2014.04.01



#include "TLD.h"

#include "ImAcq.h"

#include "Gui.h"


위의 항목들을 불러온다.




class Main

{

public:

    tld::TLD *tld;

    ImAcq *imAcq;

    tld::Gui *gui;

    bool showOutput;

bool showTrajectory;

int trajectoryLength;

    const char *printResults;

    const char *saveDir;

    double threshold;

    bool showForeground;

    bool showNotConfident;

    bool selectManually;

    int *initialBB;

    bool reinit;

    bool exportModelAfterRun;

    bool loadModel;

    const char *modelPath;

    const char *modelExportFile;

    int seed;


    Main()

    {

        tld = new tld::TLD();

        showOutput = 1;

        printResults = NULL;

        saveDir = ".";

        threshold = 0.5;

        showForeground = 0;


showTrajectory = false;

trajectoryLength = 0;


        selectManually = 0;


        initialBB = NULL;

        showNotConfident = true;


        reinit = 0;


        loadModel = false;


        exportModelAfterRun = false;

        modelExportFile = "model";

        seed = 0;


        gui = NULL;

        modelPath = NULL;

        imAcq = NULL;

    }


    ~Main()

    {

        delete tld;

        imAcqFree(imAcq);

    }


    void doWork();

};


TLD를 컨트롤 하는 메인 소스코드이다. 간단하군....



'STUDY > OpenTLD' 카테고리의 다른 글

[Class]ForegroundDetector  (0) 2014.04.12
main  (0) 2014.04.01
설치  (0) 2014.04.01


/*  Copyright 2011 AIT Austrian Institute of Technology

*

*   This file is part of OpenTLD.

*

*   OpenTLD is free software: you can redistribute it and/or modify

*   it under the terms of the GNU General Public License as published by

*    the Free Software Foundation, either version 3 of the License, or

*   (at your option) any later version.

*

*   OpenTLD is distributed in the hope that it will be useful,

*   but WITHOUT ANY WARRANTY; without even the implied warranty of

*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

*   GNU General Public License for more details.

*

*   You should have received a copy of the GNU General Public License

*   along with OpenTLD.  If not, see <http://www.gnu.org/licenses/>.

*

*/


/**

  * @author Georg Nebehay

  */


#include "Main.h"

#include "Config.h"

#include "ImAcq.h"

#include "Gui.h"


using tld::Config;

using tld::Gui;

using tld::Settings;


int main(int argc, char **argv)

{


    Main *main = new Main();

    Config config;

    ImAcq *imAcq = imAcqAlloc();

    Gui *gui = new Gui();


    main->gui = gui;

    main->imAcq = imAcq;


    if(config.init(argc, argv) == PROGRAM_EXIT)

    {

        return EXIT_FAILURE;

    }


    config.configure(main);


    srand(main->seed);


    imAcqInit(imAcq);


    if(main->showOutput)

    {

        gui->init();

    }


    main->doWork();


    delete main;

    main = NULL;

    delete gui;

    gui = NULL;


    return EXIT_SUCCESS;

}




메인 소스 코드는 위와같이 간단하다!

'STUDY > OpenTLD' 카테고리의 다른 글

[Class]ForegroundDetector  (0) 2014.04.12
[Class]Main  (0) 2014.04.01
설치  (0) 2014.04.01

나는 OpenTLD를 windows7 + 64bit 환경에서 설치하였다.

Visual Studio 2010 + Cmake를 이용하여 빌드하였다.

OpenTLD는 USB 캠으로 이용하였다.


  1. OpenTLD는 OpenCV를 사용한다.
    1. TLD : Tracking-Learning-Detection
    2. CV : Computer Vision
  2. 따라서 OpenCV를 설치하고 OpenTLD를 설치하여야 한다.


  1. OpenCV 설치한다.
    1. http://opencv.org/ 에서 다운 받는다.
    2. 압축을 푼다.
    3. 압축을 풀고 "build"라는 폴더를 만든다.    // 여기서 폴더 build는 내가 임의로 지정한 폴더 이므로 사용자에 맞게 폴더 이름을 지정하면 된다.
    4. Visual Studio 2010을 이용하여 모두 빌드한다.
  2. CMake를 이용하여 OpenCV를 빌드한다.
    1. http://www.cmake.org/ 에서 다운 받는다.
    2. 설치한다.
    3. 실행한다.
  3. Cmake를 실행한다.
    1. "Where is the source code"에 OpenCV폴더를 지정한다.
    2. "Where to build the binaries"에 OpenCV폴더에 build 폴더를 지정한다.
    3. Configure 버튼을 클릭후 환경에 맞게 설정한다.(visual studio 2010을 선택하였다.)
    4. Generate버튼을 클릭한다.
  4. OpenTLD를 Cmake를 이용하여 빌드한다..
    1. OpenTLD는 MATLAB 버젼과 C버젼이 있다.(제가 아는한... ㅋㅋ)
    2. MATLAB 버젼은 알아서 빌드하시길...
    3. C버젼을 다운 받는다.
      1. https://codeload.github.com/gnebehay/OpenTLD/zip/master 에서 OpenTLD 부분에 자세히 보면, source code 부분에서 밑줄이 있음. 
      2. MATLAB 소스 : http://personal.ee.surrey.ac.uk/Personal/Z.Kalal/tld.html 
    4. 압축을 푼다.
    5. OpenTLD에 폴더 "build"를 만든다. (1-3와 같은 역할을 한다.)
    6. Cmake로 빌드한다.(3과 동일한 작업이다.)
    7. Visual Studio 2010을 이용하여 빌드한다.
    8. 설정을 한다.
      1. 뭐... 설정하는 방법도 좋겠지만....나는 그냥 OpenCV의 dll과 lib을 OpenTLD폴더에 옮겼다.
        1. 프로젝트를 opentld를 시작 프로젝트로 설정한다.
        2. 매크로를 확인하여 "ProjectDir"경로 밑에 dll 및 lib 파일을 옮긴다.
  5. OpenTLD를 실행한다.
    1. 실행되면서, 캠화면이 나와야 정상적으로 설치된거임.


'STUDY > OpenTLD' 카테고리의 다른 글

[Class]ForegroundDetector  (0) 2014.04.12
[Class]Main  (0) 2014.04.01
main  (0) 2014.04.01

stereo matching을 확인하면서, C source style은 track bar를 쉽게 사용할 수 있다.


하지만 C++ source style을 적용하면 문제 되는게 있다. 일단 아래의 source를 보자.


위와 같은 소스를 실행하면, error C3867: 'BM::OnPreFilterSize' : 함수 호출에 인수 목록이 없습니다. '&BM::OnPreFilterSize'을 사용하여 멤버에 대한 포인터를 만드십시오. 라는 error메세지가 나올것이다. 또한 cvCreateBrackbar에서 OnPreFilterSize의 형은 CvTrackbarCallback라는 것을 명심하자.


이에 해결 방법은 다음과 같이 선언하면 된다.

위의 source와 같이 추가하면, 위에 언급한 'error C3867'문제를 해결할 수 있다.


여기서, 추가적으로 OnPreFilterSize에서 class의 멤버 변수를 변경 할 수 없다.


여러가지 방법이 있겠지만, 내가 오늘 알게 된 것은 다음과 같다.

위와 같이 추가적으로 선언해주면, static function에서도 멤버 변수를 변경 할 수 있다.





이론은 다른데에서 보시구요~

그냥  "char *"를 인자로 받아가지고 사용하는 방법을 나타냈습니다.


그냥 소스로 설명.... ㅋㅋ




void func(char *p, ...);


void main()

{

func("Hi", "man", "boy");

}



void func(char *p, ...)

{

va_list ap;

char *target, buf[_MAX_DIR];

int i = 0;


target = va_start(ap, p);

vsprintf(buf, p, ap);

do

{

if (i++ != 0)

{

sprintf(buf, target);

}

// using this 

}while((target = va_arg(ap, char *)) != NULL);

va_end(ap);

}


간단히 설명 하자면, "main" 에서 함수를 사용한다. 

여기서 인자는 "Hi", "man" and "boy" 3개를 함수("func")에 넘긴다.


그다음 함수("func")에서는 다음과 같다.

va_list 인자 생성 하고 사용할 변수를 선언한다. 여기서 "i"는  내가 기술이 부족하여 첫번째는 "target"에 바로 받았고, 두번째는 "buf"에 넣기 위해서다. (이상하게 첫번째는 "vsprintf"를 사용해야 하며, 두번재는 "sprintf"를 사용하니깐.... 잘되더라....

"while"문을 조건을 주면서 다음 인자를 받아오며, "va_end"로 마친다.



1. JDK(Java SE Developement Kit) 설치

http://www.oracle.com/technetwork/java/javase/downloads/index.html 로 이동하여 JDK를 선택한다. 아래의 이미지에서 빨간색영역을 클릭하면 다음 이미지와 같이 나타난다.


"Accept License Argreement"를 클릭하고 개발자 환경에 맞는 프로그램을 다운 받는다.


다운로드 경로에서 받은 프로그램을 시작한다. 설치는 일반적으로 다음과 같다.(개발자는 Windows7 64Bit에서 실행하였다.)


실행 버튼 클릭


NEXT


NEXT


Processing.... waiting...


NEXT


Processing.... waiting...


CLOSE


설치가 끝났다. 


"Java Setup - Destination Folder"과정에서 경로를 변경하지 않았다면, 아래 그림과 같이 실행파일 java.exe를 확인할 수 있다.







'STUDY > Android' 카테고리의 다른 글

Install NDK on Android Studio on Mac  (0) 2016.05.26


CString A;

A.Format(TEXT(" str %d "), m_nTotalFrame);

OutputDebugString(A);


이렇게 하면 되겠죠?

+ Recent posts