190 likes | 361 Views
Flycapture API. ì˜ìƒ íšë“ ì˜ìƒ ì €ìž¥ ì¹´ë©”ë¼ íŒŒë¼ë©”í„° 커스텀 ì´ë¯¸ì§€. ㈜ 싸ì´ë¡œë“œ 사업팀 ê¸°ìˆ ì§€ì›. SW Requirements. MS Visual C++ Version 6.0 Windows 2000 Service Pack 4 (Windows XP Service Pack 1 권장 ). FC API Type Definitions. FlycaptureContext FlycaptureImage. FC API Type Definitions.
E N D
Flycapture API 영상 획득 영상 저장 카메라 파라메터 커스텀 이미지 ㈜ 싸이로드 사업팀 기술지원
SW Requirements • MS Visual C++ Version 6.0 • Windows 2000 Service Pack 4(Windows XP Service Pack 1 권장)
FC API Type Definitions • FlycaptureContext • FlycaptureImage
FC API Type Definitions • FlycaptureContextPGRFlycapture Library를 위한 Context Pointertypedef void* FlycaptureContext
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];}
Flycapture API Functions • Construction/DestructionflycaptureCreateContext: FlyCaptureContext를 생성flycaptureDestroyContext: FlyCaptureContext를 DestroyflycaptureInitialize: 카메라와 FlyCaptureContext를 연결flycaptureInitializePlus (External Function): 카메라와 FlyCaptureContext를 연결(버퍼의 크기와 수를 설정할 수 있음)
Flycapture API Functions • Control FunctionsflycaptureStart: 그랩 프로세스 시작flycaptureStop: 그랩 프로세스 종료
Flycapture API Functions • Image Related FunctionsflycaptureGrabImage: 버퍼에서 가장 최근의 데이터를 획득flycaptureGrabImage2: 위의 함수와 같은 역할을 하지만 좀 더 쉽게 데이터를 획득 가능flycaptureConvertImage: 임의의 이미지 포맷을 다른 포맷으로 변경 • Other FunctionsflycaptureBusEmulationCamera: 1394 버스에 있는 카메라들의 정보를 획득.
동작절차 flycaptureGetCameraProperty, Register flycaptureSetCameraProperty, Register flycaptureCreateContext flycaptureInitialize flycaptureStart flycaptureGrabImage flycaptureStop flycaptureDestroyContext 카메라로 부터 이미지 획득하는 프로세스 종료 Context 생성 Memory Context Destroy 카메라와 Context 연결 Buffer에서 가장 최근 획득한 이미지를 FlyCaptureImage에 저장 IEEE 1394 BUS IEEE 1394 BUS 카메라로 부터 이미지 획득하는 프로세스 시작
간단한 Grab Program VC++ 설정 코드, 순서도
Visual C++ Setting 라이브러리 링크 Project->Settings->Link탭 -> Object/Library modules 에pgrflycapture.lib pgrflycapturegui.lib 추가
Visual C++ Setting • 헤더파일 추가#include "pgrerror.h“#include "pgrflycapture.h“#include "pgrcameragui.h“#include "pgrflycaptureplus.h"
VC++ Code, Diagram void CGrabDlg::On?????() { FlyCaptureContext fContext; FlyCaptureImage fImage; // initialize flycaptureCreateContext(&fContext); flycaptureInitialize(fContext,0); // start flycaptureStart(fContext,FLYCAPTURE_VIDEOMODE_ANY, FLYCAPTURE_FRAMERATE_ANY); // image grab flycaptureGrabImage2(fContext,&fImage); // image processing // stop flycaptureStop(fContext); // destroy flycaptureDestroyContext(fContext); }
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);
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);
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_GAIN FLYCAPTURE_SHUTTER FLYCAPTURE_BRIGHTNESS FLYCAPTURE_WHITE_BALANCE FLYCAPTURE_GAMMA 등
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모드를 사용하지 않는것으로 설정
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_RAW16 FLYCAPTURE_MONO8, FLYCAPTURE_MONO16 등
Custom Image ex) 위의 코드 //start 밑의 flycaptureStart() 함수를 아래와 같이 대체flycaptureStartCustomImage(fContext,0,120,108,688,496,100,FLYCAPTURE_MONO8); // 이미지의 좌표(120,108)에서 가로 688, 세로 100의 영역을 ROI모드로 그랩. 픽셀포맷 MONO8