OpenCV 재설치

개발과 트러블슈팅 2009. 11. 23. 14:01 Posted by 양고

처음에 OpenCV 2.0 빌드라고 잘못 제목을 적었으나, 결국 1.1 재설치로 밝혀짐 ㅜㅜ

프로그램 → OpenCV → OpenCV Workspace MSVC6를 열어 batch build 하면 된다고 하나 빌드 중에 VC6가 멈춘다.
VC6 자체가 맛이 간 것 같아서 일단 VC6 SP5를 깔고...
그 다음은 순차대로 전부 빌드.

cvd.lib와 cxcored.lib 등은 배치 빌드 과정에서 생성되었고,

highguid.lib 빌드
  libjasperd.lib 빌드 (C:\Program Files\OpenCV\otherlibs\_graphics\src\libjasper)
  마찬가지로 libjpegd.lib, libpngd.lib, libtiffd.lib, zlibd.lib를 빌드.

빌드는 모두 VC6만 사용했고, 일단 잘 되는 것 같다.

그런데...
원래 있던 facedetect 데모가 실행이 안 된다.
highgui110.dll이 없단다. 아마 아까 배치빌드 과정에서 버전 충돌로 파일 몇 개를 지웠는데, 그 안 에 포함됐나보다.
어쩔 수 없이 C:\Program Files\OpenCV\otherlibs\highgui에 있는 highgui 프로젝트를 다시 열어서 active configuration을 release로 바꿔서 컴파일 - 에러. 아까의 잡 프로젝트들을 전부 다시 컴파일해줘야 한다.
libjasper, libjpeg, libpng, libtiff, zlib를 모두 release로 빌드하고 다시 highgui.lib를 빌드 - 성공.

그런데 facedetect.c 내용을 복사해서 빌드한 테스트 프로젝트는 실행이 되지 않길래 보니...

의외로 classifier 관련하여 xml 파일을 불러오는 부분이 있었다.

cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );

아마도 Haar feature로 cascade를 구성하기 위한 데이터가 들어있는 듯하다. 자세한 내용은 조사할 시간이 업ㅂ다!~~

매뉴얼 일부 발췌:
The whole hierarchy can be constructed manually or loaded from a file using functions cvLoadHaarClassifierCascade or cvLoad.

해당 폴더 설명:
haarcascades - the folder contains trained classifiers for detecting objects
               of a particular type, e.g. faces (frontal, profile), pedestrians etc.
               Some of the classifiers have a special license - please,
               look into the files for details.
오오... 다른 것도 있다. 예제에서는 haarcascade_frontalface_alt.xml과 haarcascade_eye_tree_eyeglasses.xml 두 개가 사용됨.

어쨌든, 결과는 나쁘지 않다.



마지막으로, cvaux110.dll 또한 문제가 되었는데, cvaux를 빌드하려면 다음과 같은 에러가 발생한다.

C:\Program Files\OpenCV\cvaux\src\cvbgfg_acmmm2003.cpp(464) : error C2039: 'foreground_regions' : is not a member of 'CvFGDStatModel'
        ../include\cvaux.h(1301) : see declaration of 'CvFGDStatModel'

이는 다음과 같이 정의돼있는데, 굵게 표시한 글자깨진 부분이 문제이므로 수정하자.

#define CV_BG_STAT_MODEL_FIELDS()                                                   \
    int             type; /*type of BG model*/                                      \
    CvReleaseBGStatModel release;                                                   \
    CvUpdateBGStatModel update;                                                     \
    IplImage*       background;   /*8UC3 reference background image*/               \
    IplImage*       foreground;   /*8UC1 foreground image*/                         \
    IplImage**      layers;       /*8UC3 reference background image, can be null */ \
    int             layer_count;  /* can be zero */                                 \
    CvMemStorage*   storage;      /*storage for 밼oreground_regions?/              \
    CvSeq*          foreground_regions /*foreground object contours*/

typedef struct CvBGStatModel
{
    CV_BG_STAT_MODEL_FIELDS();
}
CvBGStatModel;

 opencv를 이용한 최소 캡처 프로젝트를 첨부하니 잘 활용하도록 하자!