HVR-2000 Series 이용하기

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

바로 요놈입니다.

 

바로 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

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.