Cfile9.uf .140FA24C4D2F411106AA87

HVR-2000 Series 이용하기

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

바로 요놈입니다.

Cfile28.uf .165CD2554D2F4110072D20

 

바로 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 
#include 
#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;
}

실행 화면부터 보여드릴께요~

 

Cfile9.uf .140FA24C4D2F411106AA87

 

SDK 인터페이스 가이드와 위 코드만 본다면 너무나 쉽게 이해가 가실 겁니다.

때문에 저는 이 SDK 인터페이스 가이드에서 핵심이 되는 부분 몇 가지를 보여드리고 끝내도록 하겠습니다.

 

먼저 SDK 구조도입니다.

Cfile27.uf .164CC94B4D2F41110C2BD0

막상 이렇게 보니 그다지 핵심이랄 것도 없네요… 뭐 그냥 SDK 빌드를 저런식으로 했다는군요…

 

사실 이놈이 핵심입니다. 프로그래밍 흐름과 관련 함수를 대략적으로 보여주고 있네요… 위 코드랑 비교해 봐도 딱 보이구요~

 

Cfile27.uf .145D754A4D2F41120E4963

 

싸구려 웹캠만 가지고 놀다가 조금 비싼 비전카메라 가지고 놀아보니 재미있네요~ ㅎㅎ

cfile4.uf.1277D34A4D2FF460238876.pdfcfile30.uf.197BB54A4D2FF4611C2C2D.zip
cfile26.uf.147B60394D2F42D91BB178.zipcfile8.uf.13202E334D2F430A0EBDCB.zip

Similar Posts

  • Visual Studio 2010에서 OpenCV MFC 프로젝트 만들기

    이번에는 Visual Studio 2010에서 OpenCV 2.1 라이브러리를 활용하여 MFC프로젝트를 만들고, 이미지를 불러와서 화면에 출력해보겠습니다.   먼저 제 환경은 다음과 같고, DLL파일은 path환경변수에 설정되어 있습니다. DLL : “D:\lib\bin” Header : “D:\lib\include” Library : “D:\lib\lib” Source : “D:\lib\src”   VS2010에서 [파일] → [새로만들기] → [프로젝트]를 선택합니다.   너무나도 당연하게 ‘Visual C++ MFC 응용 프로그램’을 선택해 주어야겠죠?  …

  • RGB 컬러 공간 분리 – 메뉴 기반 구현2

    이번에는 지난 시간에 해 봤던 “RGB 컬러 공간 분리 – 메뉴 기반 구현(http://deios.kr/407)”의 새 창으로 여는 부분을 조금 더 일반화 하고, MFC에 적합하게 만들어 보겠습니다.   먼저 새 창으로 이미지를 여는 전역 함수를 작성해 보겠습니다. App Class의 헤더 파일을 열어 가장 마지막에 다음과 같이 추가해 줍니다. void OpenByNewDocument(LPTSTR szTitle, IplImage * image);  이 전역 함수는…

  • RGB 컬러 공간 분리 – 메뉴 기반 구현

    이번에는 본격적으로 OpenCV를 사용하여 영상처리를 해 보겠습니다. 그 첫 단계로 메뉴기반 정지영상 처리를 해 볼 것이며, cvSplit함수를 사용하여 RGB 컬러공간을 분리하는 예제를 구현해 보겠습니다.   먼저 OpenCV 2.1 C API Reference에서 cvSplit함수를 찾아보면 다음과 같습니다. cvSplit함수는 다중 채널(Multi-channel)배열을 여러 개의 단일 채널(Single-channel) 배열로 분할하거나, 배열에서 단일 채널을 추출 할 수 있음을 알 수 있습니다. 또한,…

  • AcroEdit에서 C/C++ Compile 하기…

    이제 슬슬 공부나 해볼까하고 마음먹던중;;; 그냥 갑자기 C를 하고 싶어졌습니다… 이제까지 하려고 하려고 해도… 귀찮아서 접어두었던 C 책 한권을 꺼내서;;; 첫장을 펼처보니 “Turbo C++”를 설치하라는 겁니다… 전 착한 학생이기 때문에(~ㅋ) 하라는데로 설치했죠;;; 설치하고 보니 이게 왼걸;;; 구석기시대에서나 볼수있는 인터페이스;;; ㄷㄷ;;; 그래서 부대안에 있을때 사용했던 AcroEdit과 연결하기로 마음먹었습니다… 열심히 컴파일러를 찾아 해매였는데…;;; 이게 왠걸;;; 도처히 못찾겠습니다.;;;…

  • Drag and Drop 지원하기

    이번 시간에는 드래그 앤 드롭(Drag & Drop) 기능을 구현해 보도록 하겠습니다. App Class의 InitInstance함수에 다음과 같은 코드를 추가하면 끝~! pMainFrame->DragAcceptFiles();   cfile8.uf.163148404D261B97190741.pdfcfile10.uf.133139404D261B9716AF4E.zip 관련된 글: Visual Studio 2010에서 OpenCV MFC 프로젝트 만들기 OpenCV 파일 저장기능 구현 OpenCV 파일 저장기능 구현2 RGB 컬러 공간 분리 – 메뉴 기반 구현2

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다