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

  • Face Detect

    이번 시간은 MFC와 OpenCV의 기본 사용법 마지막 내용이 되겠습니다. Cam 영상을 Dialog에 뿌려주는 부분에서 기본 사용법이 끝났어야 하지만… 조금 아쉬운 관계로 더 진행해 봤죠… 저도 아직 초보단계지만, MFC와 OpenCV의 기본 사용법은 뭐 없습니다… MFC야… GUI프로그래밍을 위해서 그냥 쓴 것이고… OpenCV는 영상을 받아오고, 출력하는 부분만 하면 기본은 끝난거 아닌가요?   지금까지 “오픈소스 OpenCV를 이용한 컴퓨터 비전…

  • 데이터 종속성과 정규화

    함수종속 어떤 릴레이션 R에서 X와 Y를 의 애트리뷰트 집합의 부분집합이라 하자.  X의 값 각각에 대해 시간에 관계 없이 Y의 값이 오직 하나만 연관되어 있을 때 Y는 X에 함수종속이라 하고 X →Y로 표기한다. 이 때, X를 결정자, Y를 종속자라고 한다. 제 1 정규형(1NF) 어떤 릴레이션 R에 속한 모든 도메인이 원자값만으로 되어 있다면 제 1 정규형이라고 한다. 제 2…

  • |

    TCP 폭주(혼잡)제어

    TCP의 폭주제어에서 예약방식을 못 쓰고 피드백 기반 방식을 사용하여야 하는 이유를 설명하시오. 예약 방식의 경우 데이터 전송 중 경로상의 라우터에서 폭주 혹은 에러가 발생했을 경우 송신자는 계속 데이터를 보내게 되어 혼잡이 가중된다. 이를 해결하기 위해 피드백 방식을 사용한다.송신자는 약간의 데이터만 전송하여 도착 여부를 확인 후 점점 전송량을 늘려간다. 이처럼 네트워크의 상태에 따라 송신측에서 전송량을 조절하여야 한다….

  • Visual Studio 2010에서 OpenCV 라이브러리 빌드하기

    저번에 해봤던 “Visual Studio 2010에서 OpenCV 이용하기(http://deios.kr/395)”에서는 디버그 모드로 이용이 불가능한 문제가 있었습니다. 그래서 이 번에는 직접 OpenCV 2.1 라이브러리를 빌드해 보도록 하겠습니다.   먼저 CMake를 다운받습니다. CMake는 크로스 플렛폼 Make네요. http://www.cmake.org/cmake/resources/software.html 설치는 별 다른게 없습니다. 그냥 다음 연타로 CMake를 설치해 줍니다.   다음으로 OpenCV 2.1 Windows Version을 다운받고, 적당한 곳에 압축을 풀어 줍니다. http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.1/OpenCV-2.1.0-win.zip/download…

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

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

답글 남기기

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