[Matrox Imaging Library - MIL] 2 : MIL 기본 소스코드 분석
본문 바로가기

영상처리(Matrox Library, Frame grabber)/Matrox Library

[Matrox Imaging Library - MIL] 2 : MIL 기본 소스코드 분석

안녕하세요~

오늘은 실제로 소스 상에서 할당과 해제를 어떻게 하는지 살펴 볼까요?

 

#include “mil.h”

 

void main(void)

{

   MIL_ID MilApplication;

MIL_ID MilSystem;

MIL_ID MilDigitizer;

MIL_ID MilImage;

MIL_ID MilDisplay;

 

 

// Allocate

MappAlloc(M_DEFAULT, &MilApplication);

MsysAlloc(M_SYSTEM_SOLIOS, M_DEV0, M_DEFAULT, &MilSystem);

MdigAlloc(MilSystem, M_DEV0, “svs11002mucp.dcf”, M_DEFAULT, &MilDigitizer);    

MbufAlloc2d(MilSystem, 4008, 2672, 8+M_UNSIGNED, M_IMAGE+M_GRAB+M_DISP, &MilImage);  

MdispAlloc(MilSystem, M_DEFAULT, "M_DEFAULT", M_WINDOWED, &MilDisplay);

 

 

// Free

MdispFree(MilDisplay);

MbufFree(MilImage);

MdigFree(MilDigitizer);

MsysFree(MilSystem);

MappFree(MilApplication);

}

 

다섯 개의 모듈을 순차적으로 할당하고, 해제했어요.

간단하지요?

  

 

~ 그럼 라인by라인으로 쪼개어 설명합니다~

 

 

 

 

#include “mil.h”

MIL 헤더 파일을 포함시켜야지요? 헤더 파일은 C:\Program Files\Matrox Imaging\Mil\Include 경로에 있습니다.

 

void main(void)

{

MIL_ID MilApplication;

MIL_ID MilSystem;

MIL_ID MilDigitizer;

MIL_ID MilImage;

MIL_ID MilDisplay;

 MIL_ID MIL에서 사용하는 변수 타입은 long 포인터입니다. 필요한 모듈을 MIL_ID형으로 선언하세요.

 

 

// Allocate

MappAlloc(M_DEFAULT, &MilApplication);

 최상위 모듈을 할당하세요

MsysAlloc(M_SYSTEM_SOLIOS, M_DEV0, M_DEFAULT, &MilSystem);

시스템은 프레임 그래버 보드라고 했죠.
Solios
보드를 시스템으로 할당하고,
보드가 여러 장인 경우 M_DEV0, M_DEV1, … M_DEVn 으로 합니다.
일반적으로 VGA 카드에서 가까운 보드가 M_DEV0 됩니다.
그러나 산업용 컴퓨터의 경우는 다를 있으니 확인하세요.

 

MdigAlloc(MilSystem, M_DEV0, “Clcamera.dcf”, M_DEFAULT, &MilDigitizer);    

카메라에 대한 할당입니다.
보세요~ 번째 인자로 MilSystem 되어 있지요?
MilSystem Solios 보드를 할당한 것입니다.
따라서 MilDigitiezr Solios 보드에 연결된 카메라이다 라는 것을 있습니다.
강좌에서 말한 것과 같이 digitizer system 종속되어 있습니다.
M_DEV0
위와 마찬가지로 번째 카메라라는 의미입니다.
따옴표 안에 들어간 Clcamera….dcf 무엇일까요?
Dcf
digitizer configuration file 약자입니다.
카메라에 대한 정보를 dcf 파일에 담고 있습니다.
frame grabber
사용자가 어떤 카메라를 쓰는지 없기 때문에 카메라에 대한 정보를 알려주어야 합니다.
따라서 Intellicam이라는 Tool 통해 영상을 확인한 , dcf 파일을 소스상에서 사용하면 됩니다.
dcf
파일은 고민할 필요 없이 앤아이피에 문의하면 되요~

MbufAlloc2d(MilSystem, 4008, 2672, 8+M_UNSIGNED, M_IMAGE+M_GRAB+M_DISP, &MilImage);  

버퍼의 할당입니다.
역시 system 종속되어 있지요?
4008, 2672
카메라의 해상도를 말합니다.
직접 지정하기도 하고, MdigInquire( ) 이용하여 digitizer sizeX, sizeY 얻어올 있습니다.
8+M_UNSIGNED
에서 8 카메라의 data depth(8-bit)이며, unsigned 형으로 할당한다는 의미 입니다.
다음은 아주 중요한 속성이죠.
사용자가 버퍼를 어떠한 용도로 사용하겠느냐는 것입니다.
M_IMAGE+M_GRAB+M_DISP
이미지용+영상획득용+영상출력용으로 사용하겠다는 의미입니다.
원하는 속성을 플러스 기호(+) 연결하면 됩니다.

 

MdispAlloc(MilSystem, M_DEFAULT, "M_DEFAULT", M_WINDOWED, &MilDisplay);

디스플레이에 대한 할당입니다.
여러 개의 화면에 출력하는 경우, disp 모듈을 여러 할당하면 됩니다.
컴퓨터에 연결된 모니터 상에 출력하는 경우, 위와 같이 할당하면 됩니다.

 

 

 

 

// Free

MdispFree(MilDisplay);

MbufFree(MilImage);

MdigFree(MilDigitizer);

MsysFree(MilSystem);

MappFree(MilApplication);

할당한 모듈 순서의 반대로 모듈별 Free() 함수를 이용하여 해제하면 됩니다.

}

 

 

각 함수의 파라미터는 MILHelp를 참고하세요.

대부분의 위에서 설명한 내용에서 크게 벗어나지 않습니다.