이번 시간에는 조금 더 재미있는 것을 해 보겠습니다.
바로 요놈입니다.

바로 HyVision System의 HVR-2000 Series입니다.
일반적인 웹캠이야 그냥 연결만 해주면 바로 써먹을 수 있었는데, 요놈은 조금 다릅니다.
USB드라이버야 당연히 깔아줘야 하는거고… 별도의 SDK를 이용해서 Cam에 접근하게 됩니다.
하이비전시스템에서 HVR SDK Interface Guide를 친절하게 작성해 주셔서 별 무리 없이 실습을 진행 해 볼 수 있었습니다.
먼저 HVR SDK를 사용하기 위해서는 당연히 라이브러리 세팅을 해줘야겠죠? 필요한 파일은 너무나도 잘 아시겠지만 3가지입니다. 헤더파일, 라이브러리파일, DLL파일이겠죠?
include : HVRLibEx.h
library : HVRLibV10.lib
bin : HVRLibV10.dll, HVRcore.dll, HVRcv.dll, HVRhg.dll, USB20VisionDLL_V11.dll
적당히 잘 세팅해 줍니다.
설마 아직도 라이브러리 세팅법을 모르시는건 아니겠죠?
혹시… 단기 기억 상실증 등으로 잠깐 잊어버리셨다면 “Visual Studio 2010에서 OpenCV 이용하기(http://deios.kr/395)”를 참고해서 세팅해 주세요~
백문이불여일타~! 일단 코드부터 보고 시작하겠습니다.
// CamTest.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
#include "HVRLibEx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int nDrvNum;
int nDrvInform[MAX_DEVICE];
memset(nDrvInform, NULL, sizeof(nDrvInform));
// 연결된 Camera를 초기화 하고 식별자를 구함
nDrvNum = HVR_camDrvInit(&nDrvInform[0]);
// Cam이 여러 개 연결되었을 경우 각각의 식별자를 구한다.
for(int i = 0; i < nDrvNum; i++){
printf("Device sequence=%3d, id=%x\n", i, nDrvInform[i]);
}
if(!HVR_ispResolutionCmd(VGA, HVR2300R, 0)){
printf("해상도 설정에 실패하였습니다.\n");
return 1;
}
// 센서 초기화
if(!HVR_camSensorInit(HVR2300R, 0)){
printf("센서가 초기화 되지 않았습니다.\n");
return 1;
}
// Exposure Time(빛을 받아드리는 속도)를 메뉴얼로 설정한다.
if(!HVR_ispSetExposureTime(5000, HVR2300R, 0))
printf("HVR_ispSetExposureTime의 입력값이 Range를 벗어났거나, 정상동작 하지 않습니다.\n");
BYTE *pRAWBuf;
pRAWBuf = new BYTE[640*480];
IplImage *image = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
IplImage *imageItp = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);
cvNamedWindow("Test HVR2300R", 0 );
cvResizeWindow("Test HVR2300R", 640, 480);
while(1){
// Camera 영상 데이터를 받아온다
switch(HVR_camGetImageData(640*480, pRAWBuf, 0)){
case USB_DATA_PASS :
image->imageData = (char*)pRAWBuf;
cvCvtColor( image, imageItp, CV_BayerGB2BGR);
cvShowImage( "Test HVR2300R", imageItp );
break;
case USB_DATA_FAIL :
printf("USB_DATA_FAIL.\n");
continue;
case USB_BAND_HALT :
printf("USB_BAND_HALT.\n");
return 1;
}
if( cvWaitKey(10) >= 0 ) break;
}
delete pRAWBuf;
cvReleaseImage(&image);
cvReleaseImage(&imageItp);
cvDestroyWindow( "Test HVR2300R" );
return 0;
}
실행 화면부터 보여드릴께요~

SDK 인터페이스 가이드와 위 코드만 본다면 너무나 쉽게 이해가 가실 겁니다.
때문에 저는 이 SDK 인터페이스 가이드에서 핵심이 되는 부분 몇 가지를 보여드리고 끝내도록 하겠습니다.
먼저 SDK 구조도입니다.

막상 이렇게 보니 그다지 핵심이랄 것도 없네요… 뭐 그냥 SDK 빌드를 저런식으로 했다는군요…
사실 이놈이 핵심입니다. 프로그래밍 흐름과 관련 함수를 대략적으로 보여주고 있네요… 위 코드랑 비교해 봐도 딱 보이구요~

싸구려 웹캠만 가지고 놀다가 조금 비싼 비전카메라 가지고 놀아보니 재미있네요~ ㅎㅎ
cfile4.uf.1277D34A4D2FF460238876.pdfcfile30.uf.197BB54A4D2FF4611C2C2D.zip
cfile26.uf.147B60394D2F42D91BB178.zipcfile8.uf.13202E334D2F430A0EBDCB.zip