---
title: "HVR-2000 Series 이용하기"
id: "737"
type: "post"
slug: "419"
published_at: "2011-01-13T18:23:47+00:00"
modified_at: "2025-12-12T04:28:10+00:00"
url: "https://dworld.deios.kr/419/"
markdown_url: "https://dworld.deios.kr/419.md"
excerpt: "이번 시간에는 조금 더 재미있는 것을 해 보겠습니다. 바로 요놈입니다. 바로 HyVision System의 HVR-2000 Series입니다. 일반적인 웹캠이야 그냥 연결만 해주면 바로 써먹을 수 있었는데, 요놈은 조금 다릅니다. USB드라이버야 당연히 깔아줘야 하는거고… 별도의 SDK를 이용해서 Cam에 접근하게 됩니다. 하이비전시스템에서 HVR SDK..."
taxonomy_category:
  - "Study"
taxonomy_post_tag:
  - "AR"
  - "opencv"
  - "VS2010"
  - "증강현실"
---

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

바로 요놈입니다.

바로 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)](https://dworld.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;
}
```

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

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

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

먼저 SDK 구조도입니다.

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

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

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

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

### 이 글 공유하기:

- [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/419/?share=facebook)
- [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/419/?share=x)
-

### 이것이 좋아요:

좋아하기로드 중...

### *관련*

### 관련된 글:

1. [공간 영역 필터링 – Dialog Box 기반 구현](https://dworld.deios.kr/409/)
2. [Cam 영상 출력해보기](https://dworld.deios.kr/413/)
3. [MFC – Cam 영상 출력해보기](https://dworld.deios.kr/420/)
4. [모덜리스(Modeless) Dialog로 변환하기](https://dworld.deios.kr/421/)

## Similar Posts

- [https://dworld.deios.kr/402/](https://dworld.deios.kr/402/) “OpenCV 파일 저장기능 구현(http://deios.kr/401)”에 파일 저장기능과 파일 열기기능을 강화해 보도록 하겠습니다. 먼저 “새 이름으로 저장”시 자동으로 확장자를 추가하기 위해서 OnFileSaveAs함수를 수정하겠습니다. 수정 전 CFileDialog dlgFile(TRUE); CString fileName; const int c_cMaxFiles = 100; const int c_cbBuffSize = (c_cMaxFiles * (MAX_PATH + 1)) + 1; dlgFile.GetOFN().lpstrFile = fileName.GetBuffer(c_cbBuffSize); dlgFile.GetOFN().nMaxFile = c_cbBuffSize; int chk = dlgFile.DoModal(); fileName.ReleaseBuffer();… ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/402/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/402/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...
- [https://dworld.deios.kr/401/](https://dworld.deios.kr/401/) “Visual Studio 2010에서 OpenCV MFC 프로젝트 만들기(http://deios.kr/400)”에 이어 이번에는 파일 저장기능을 구현해 보도록 하겠습니다. 파일 열기는 OnOpenDocument()함수를 재정의 했던거 기억하시죠? 마찬가지로 파일 저장은 OnSaveDocument()함수를 재정의 하면 됩니다. 이젠 그림만 봐도 아시겠죠? return CDocument::OnSaveDocument(lpszPathName); 부분을 다음과 같이 수정합니다. USES_CONVERSION; return m_CvvImage.Save(W2A(lpszPathName)); 저번에도 말씀드렸지만 OpenCV 라이브러리가 char *형을 받기 때문에 W2A매크로를 사용해 줍니다. 이번에는 새… ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/401/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/401/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...
- [https://dworld.deios.kr/400/](https://dworld.deios.kr/400/) 이번에는 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 응용 프로그램’을 선택해 주어야겠죠? … ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/400/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/400/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...
- [https://dworld.deios.kr/404/](https://dworld.deios.kr/404/) 이번 시간에는 드래그 앤 드롭(Drag & Drop) 기능을 구현해 보도록 하겠습니다. App Class의 InitInstance함수에 다음과 같은 코드를 추가하면 끝~! pMainFrame->DragAcceptFiles(); cfile8.uf.163148404D261B97190741.pdfcfile10.uf.133139404D261B9716AF4E.zip 관련된 글: Visual Studio 2010에서 OpenCV 이용하기 OpenCV 파일 저장기능 구현2 모든 창 닫기 구현 클립보드 기능 구현 ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/404/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/404/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...
- [https://dworld.deios.kr/421/](https://dworld.deios.kr/421/) 이전 시간에 만들었던 모달(Modal) Dialog를 모덜리스(Modeless) Dialog로 변환해 보겠습니다. Modal Dialog는 Dialog가 실행되는 동안 다른 작업을 하지 못하고, Modeless Dialog는 프로그램 실행 흐름을 방해하지 않는다는 것 정도는 알고 계시죠? 자 그럼 이전 시간 “MFC – Cam 영상 출력해보기(http://deios.kr/420)”에 만들었던 View Dialog를 멋지게 바꿔 보겠습니다. OnCamView함수를 다음과 같이 수정합니다. void CMFC_OpenCVApp::OnCamView() { // TODO: 여기에 명령… ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/421/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/421/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...
- 고속 네트워크 프로토콜중leaky bucket, flowspec, RSVP, policing, admission control 등의 유기적인 관계를 정확히 쓰시오(수행 과정, 목적 등) 과 모임을 위하여 술집을 예약하는 과정을 빗대어서 설명.Application은 Network에게 질적인 정보나 양적인 정보를 준다. 질적인 정보는 쉽게 명세가 가능하지만 양적인 정보는 쉽게 명세가 불가능하다. Application이 Network에게 주는 이러한 정보를 flowspec이라고 한다. flowspec은 흐름의 트래픽 특성(양적인 정보)을 묘사하는 부분과… ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/370/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/370/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...

### 댓글 남기기[응답 취소](/419/?t=1784808100#respond)
