flycapture api 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지...

19
Flycapture API 1. 영영 영영 2. 영영 영영 3. 영영영 영영영영 4. 영영영 영영영 ㈜ ㈜㈜㈜㈜ ㈜㈜㈜ ㈜㈜㈜㈜

Upload: rosamund-loren-lang

Post on 18-Jan-2016

296 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

Flycapture API

1. 영상 획득2. 영상 저장3. 카메라 파라메터4. 커스텀 이미지

㈜ 싸이로드 사업팀 기술지원

Page 2: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

SW Requirements

• MS Visual C++ Version 6.0

• Windows 2000 Service Pack 4(Windows XP Service Pack 1 권장 )

Page 3: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

FC API Type Definitions

• FlycaptureContext

• FlycaptureImage

Page 4: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

FC API Type Definitions

• FlycaptureContext

PGRFlycapture Library 를 위한 Context Pointer

typedef void* FlycaptureContext

Page 5: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

FC API Type Definitions

• FlycaptureImage

이미지의 정보를 저장하는 구조체

struct FlycaptureImage{

int iRows; // 이미지의 세로 픽셀수int iCols; // 이미지의 가로 픽셀수

int iRowInc; // 바이트수 / 가로FlyCaptureVideoMode videoMode; // 캡쳐되었을때

비디오모드FlyCaptureTimestamp timeStamp; // 이미지의 타임스탬프unsigned char* pData; // 실제 이미지데이터를 가르키는

포인터bool bStippled;FlyCapturePixelFormat pixelFormat;unsigned long ulReserved[6];

}

Page 6: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

Flycapture API Functions

• Construction/DestructionflycaptureCreateContext: FlyCaptureContext 를 생성

flycaptureDestroyContext: FlyCaptureContext 를 Destroy

flycaptureInitialize: 카메라와 FlyCaptureContext 를 연결

flycaptureInitializePlus (External Function)

: 카메라와 FlyCaptureContext 를 연결 ( 버퍼의 크기와 수를 설정할 수 있음 )

Page 7: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

Flycapture API Functions

• Control FunctionsflycaptureStart: 그랩 프로세스 시작

flycaptureStop: 그랩 프로세스 종료

Page 8: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

Flycapture API Functions

• Image Related FunctionsflycaptureGrabImage: 버퍼에서 가장 최근의 데이터를 획득

flycaptureGrabImage2: 위의 함수와 같은 역할을 하지만 좀 더 쉽게 데이터를 획득 가능

flycaptureConvertImage: 임의의 이미지 포맷을 다른 포맷으로 변경

• Other FunctionsflycaptureBusEmulationCamera: 1394 버스에 있는 카메라들의 정보를 획득 .

Page 9: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

동작절차

FlycaptureContext FlycaptureImage

IEEE 1394 BUS IEEE 1394 BUS

Memory

buffer

flycaptureCreateContext flycaptureInitialize flycaptureStart

flycaptureGrabImage flycaptureStop flycaptureDestroyContext

flycaptureSetCameraProperty, Register

flycaptureGetCameraProperty, Register

Context 생성

카메라와 Context 연결

카메라로 부터 이미지 획득하는 프로세스 시작

Buffer 에서 가장 최근 획득한 이미지를 FlyCaptureImage 에 저장

카메라로 부터 이미지 획득하는 프로세스 종료 Context

Destroy

Page 10: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

간단한 Grab Program

1. VC++ 설정2. 코드 , 순서도

Page 11: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

Visual C++ Setting

라이브러리 링크Project->Settings->Link 탭 -> Object/Library modules 에

pgrflycapture.lib pgrflycapturegui.lib 추가

Page 12: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

Visual C++ Setting

• 헤더파일 추가

#include "pgrerror.h“#include "pgrflycapture.h“#include "pgrcameragui.h“#include "pgrflycaptureplus.h"

Page 13: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

VC++ Code, Diagramvoid CGrabDlg::On?????() {

FlyCaptureContext fContext;FlyCaptureImage fImage;

// initializeflycaptureCreateContext(&fContext);flycaptureInitialize(fContext,0);

// startflycaptureStart(fContext,FLYCAPTURE_VIDEOMODE_ANY,

FLYCAPTURE_FRAMERATE_ANY);

// image grabflycaptureGrabImage2(fContext,&fImage);

// image processing

// stopflycaptureStop(fContext);

// destroyflycaptureDestroyContext(fContext);

}

Page 14: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

Grab 된 영상 출력위의 코드에서 // image processing 부분에 아래와 같은 코드를 추가

FlyCaptureImage fImageRGB; // fImageRGB 변수 선언fImageRGB.pixelFormat=FLYCAPTURE_BGR; // fImageRGB 의 픽셀포맷을 BGR 형으로 선언fImageRGB.pData=new unsigned char[1024*768*3]; // 영상 저장 공간 확보

flycaptureConvertImage(fContext,&fImage.image,&fImageRGB); // 이전에 그랩된 영상을 fImageRGB 의 // 픽셀 포맷 형태로 변환

StretchDIBits( // StretchDIBits 함수를 통해 영상을 화면에 출력pdc->m_hDC,0,768,1024,-768,0,0,1024,768,cImg,(LPBITMAPINFO)bmp,DIB_RGB_COLORS,SRCCOPY);

Page 15: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

Grab 된 영상 저장

flycaptureSaveImage 함수 사용flycaptureSaveImage(FlyCaptureContext context, const FlyCaptureImage * pImage,

const char* pszPath, FlyCaptureImageFileFormat format)

pszPath : 파일을 저장할 파일의 이름

format : 저장할 파일의 형식FLYCAPTURE_FILEFORMAT_BMP - 비트맵 파일FLYCAPTURE_FILEFORMAT_JPG - JPG 파일FLYCAPTURE_FILEFORMAT_PGM - PGM 파일FLYCAPTURE_FILEFORMAT_PNG -PNG 파일FLYCAPTURE_FILEFORMAT_PPM - PPM 파일FLYCAPTURE_FILEFORMAT_RAW - RAW 파일

ex) 이전 코드의 // image processing 부분에 아래와 같은 코드를 추가flycaptureSaveImage(fContext,&fImage,"C:\\test.bmp",FLYCAPTURE_FILEFORMAT_BMP);

Page 16: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

Camera Parameter 변경flycaptureSetCameraProperty, flycaptureGetCameraProperty 함수 사용

flycaptureGetCameraProperty - 카메라 파라메터 값을 획득flycaptureSetCameraProperty - 카메라 파라메터 값을 설정카메라가 초기화된 후 (flycaptureInitialize 함수가 수행된 후 ) 사용 가능

flycaptureGetCameraProperty(FlyCaptureContext context,FlyCaptureProperty cameraproperty, long* lValueA, long* lValueB, bool* bAuto);

lValueA - 첫번째 인자값lValueB - 두번째 인자값bAuto - auto 모드 상태 (auto 로 설정되어 있을 경우 카메라가 값을 자동으로 설정 )

cameraproperty – 획득할 카메라의 파라메터FLYCAPTURE_GAINFLYCAPTURE_SHUTTERFLYCAPTURE_BRIGHTNESSFLYCAPTURE_WHITE_BALANCEFLYCAPTURE_GAMMA 등

Page 17: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

Camera Parameter 변경flycaptureSetCameraProperty(FlyCaptureContext context,FlyCaptureProperty cameraproperty,

long lValueA, long lValueB, bool bAuto);

lValueA - 첫번째 인자값lValueB - 두번째 인자값bAuto - auto 모드 상태 (auto 로 설정되어 있을 경우 카메라가 값을 자동으로 설정 )

ex) 위의 코드 //initialize 부분 끝에 다음과 같은 코드 추가

long gainA=0;long gainB=0; bool gainAuto=0;

flycaptureGetCameraProperty(m_flyCaptureContext,FLYCAPTURE_GAIN,&gainA,&gainB,&gainAuto); // 카메라에 설정된 Gain 값을 획득

flycaptureSetCameraProperty(m_flyCaptureContext,FLYCAPTURE_GAIN,10,0,0);

// Gain 값을 10 으로 , Auto 모드를 사용하지 않는것으로 설정

Page 18: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

Custom Image

Grab 프로세스를 시작할때 , flycaptureStart 함수 대신에 flycaptureStartCustomImage 함수를 사용하여 ROI, BINNING 기능 구현

flycaptureStartCustomImage(FlyCaptureContext context, unsigned int uiMode, unsigned int uiImagePosLeft, unsigned int uiImagePosTop, unsigned int uiWidth, unsigned int uiHeight float fBandWidth, FlyCapturePixelFormat format)

uiMode - 카메라의 특정 모드 (0: ROI, 1:BINNING)uiImagePosLeft, uiImagePosTop – 이미지의 왼쪽 , 위의 위치uiWidth, uiHeight – 이미지의 가로 , 세로fBandWidth – 전송하기위한 카메라의 최대 대역폭fomat – 사용하려는 픽셀포맷

FLYCAPTURE_RAW8, FLYCAPTURE_RAW16FLYCAPTURE_MONO8, FLYCAPTURE_MONO16 등

Page 19: Flycapture API 1. 영상 획득 2. 영상 저장 3. 카메라 파라메터 4. 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원

Custom Image

ex) 위의 코드 //start 밑의 flycaptureStart() 함수를 아래와 같이 대체

flycaptureStartCustomImage(fContext,0,120,108,688,496,100,FLYCAPTURE_MONO8);

// 이미지의 좌표 (120,108) 에서 가로 688, 세로 100 의 영역을 ROI모드로 그랩 . 픽셀포맷 MONO8