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

  • |

    TCP 폭주(혼잡)제어

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

  • Drag and Drop 지원하기

    이번 시간에는 드래그 앤 드롭(Drag & Drop) 기능을 구현해 보도록 하겠습니다. App Class의 InitInstance함수에 다음과 같은 코드를 추가하면 끝~! pMainFrame->DragAcceptFiles();   cfile8.uf.163148404D261B97190741.pdfcfile10.uf.133139404D261B9716AF4E.zip 관련된 글: Visual Studio 2010에서 OpenCV 이용하기 OpenCV 파일 저장기능 구현2 모든 창 닫기 구현 클립보드 기능 구현

  • |

    고속 네트워크에서의 메모리 병목 현상

    메모리가 미래 통신에 있어서 병목 지점이 되는 이유를 설명하고 해결 방안을 제시하시오. 1) 메모리는 코드와 데이터를 함께 저장한다. 표현 계층이 개입한다면 메모리 연산이 증가하게 되어 병목 현상이 발생한다. -> 표현계층을 적게 사용한다.2) 각 계층 이동시 메모리 연산 증가. OSI-7-layer에서 각 계층 이동시 메모리 복사가 빈번하게 일어나게 된다. -> shared memory, page remapping, 계층 통합 처리3)…

  • 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…

답글 남기기

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