소스는 아래와 같다.<접기 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

네가 살고 있는 이유는 뭐야?


.

.

.


갑자기 앞에 말이 생각 나네....


.

.

.


.... 


.

.

.


지금 열심히 살자!!!

'Life' 카테고리의 다른 글

[생각]  (0) 2014.04.21
[생각]  (0) 2014.04.12
나는 생각한다.  (0) 2014.02.20
[명언]  (0) 2013.12.20
[명언]  (0) 2013.12.12

나는

생각하고, 

생각하고,

생각한다.


'Life' 카테고리의 다른 글

[생각]  (0) 2014.04.12
[생각!]  (0) 2014.02.21
[명언]  (0) 2013.12.20
[명언]  (0) 2013.12.12
[일본]긴사이(오사카, 교토, 나라, 고베) 잠깐 방문  (0) 2013.08.13

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"로 마친다.



화내지 말자!!!!!
~했다(과거형) : 긍정적 이야기 : 실천(실행)하였다

~할것이다(될것이다) : 부정적 이야기 : 생각만 하므로 실천하거나 행동하지 않는다


'Life' 카테고리의 다른 글

[생각!]  (0) 2014.02.21
나는 생각한다.  (0) 2014.02.20
[명언]  (0) 2013.12.12
[일본]긴사이(오사카, 교토, 나라, 고베) 잠깐 방문  (0) 2013.08.13
40 Tips for Happy Health Life - MUST READ & SHARE  (0) 2013.01.08

+ Recent posts