본문 바로가기
코스웨어/15년 스마트컨트롤러

20151124 수업 / WinAPI_9-비트맵 히스토그램 그리기, 영상처리 - 남수진

by 알 수 없는 사용자 2015. 11. 24.
728x90
반응형

WinAPI

  • PatBlt
    • 정해진 영역을 채색하는 함수
    • CreateCompatibleBitmap으로 비트맵을 만들고 바로 출력하면 검은 배경이 나오는 문제를 해결하기위해 사용
    • 비트맵이 선택된 MemDC에 PatBlt를 호출하여 배경색을 하얗게 만들어준다

Image(83)

Image(84)

  • 결과 사진

Image(85)


영상처리

  • vfw32.lib 추가
    • 프로젝트에 추가

Image(86)

Image(87)

    • 소스에 추가
      • #pragma comment(lib, "vfw32.lib");
  • vfw 라이브러리 함수
    • 영상을 가져올 수 있도록 하기위한 함수
    • 라이브러리 사용 순서
      • HWND VFWAPI capCreateCaptureWindow(
           LPCTSTR lpszWindowName,
           DWORD   dwStyle,
        int     x,
        int     y,
        int     nWidth,
        int     nHeight,
           HWND    hWnd,
        int     nID
        )
        • 비디오를 출력할 윈도우를 만든다
        • dwStyle = 윈도우 모양
        • 리턴값은 만들어진 윈도우의 핸들
          • NULL이면 실패
      • BOOL capDriverConnect(hwnd, iIndex)
        • 화면을 카메라와 연결
        • hWnd는 capCreateCaptureWindow에서 만든 핸들러
        • 리턴값이 FALSE면 실패
      • BOOL capDriverConnect(hwnd, iIndex)
        • 카메라 드라이버와 연결
        • iIndex는 카메라 번호
          • 우리는 하나만 쓰므로 0
      • DWORD capGetVideoFormat(hwnd, psVideoFormat, wSize)
        • BITMAPINFO 형의 변수에 비디오 형식 값을 받아온다
      • DWORD capSetVideoFormat(hwnd, psVideoFormat, wSize)
        • BITMAPINFO 형 변수로 비디오 형식을 설정한다
      • BOOL capPreview(hwnd, f)
        • 영상 화면 출력
        • f: Preview flag

Image(88)


  • 영상 데이터를 처리하기 위해서는 CALLBACK 함수로 영상출력
  • BOOL capSetCallbackOnVideoStream(hwnd, fpProc)
    • 영상이 캡쳐될 때마다 호출될 콜백 함수를 설정
  • LRESULT CALLBACK capVideoStreamCallback(HWND hWnd, LPVIDEOHDR lpVHdr)
    • 호출될 콜백함수 원형
    • LPVIDEOHDR : VIDEOHDR 형 변수의 주소
  • StretchDIBits
    • 원본의 영상을 복사해서 화면의 다른 곳으로 이동시키는 함수

int StretchDIBits(

  _In_       HDC        hdc,
  _In_       int        XDest,
  _In_       int        YDest,
  _In_       int        nDestWidth,
  _In_       int        nDestHeight,
  _In_       int        XSrc,
  _In_       int        YSrc,
  _In_       int        nSrcWidth,
  _In_       int        nSrcHeight,
  _In_ const VOID       *lpBits,
  _In_ const BITMAPINFO *lpBitsInfo,
  _In_       UINT       iUsage,
  _In_       DWORD      dwRop

);

Image(89)

Image(90)

Image(91)


  • 콜백 함수의 인자를 이용해 영상 데이터 추출/수정
    • 콜백 함수의 두번째 인자 LPVIDEOHDR lpVHdr의 lpData을 이용해서 한 프레임의 영상을 얻을 수 있다

Image(92)

Image(93)

    • 영상을 4분할하여 각각 다르게 처리하기

Image(94)

Image(95)

728x90