T9T9 planet

OpenCV에서 전체화면(fullscreen)으로 출력하기 위해 highgui.dll 을 수정한 코드입니다. 막강하고 편리한 OpenCV를 이용해서 컴퓨터 비젼(Computer Vision), 영상처리(Image Processing)등을 하여 인터렉티브 아트(Interactive Arts)를 하고자 할 때, 전체화면으로 돌려야 하는 경우가 있는데, 기본적으로 제공되지 않아 다양한 방법을 이용해야 했습니다.

  [참고] WinAPI 기반, MFC 기반의 풀스크린 띄우기, http://lifenote.tistory.com/221

하지만 보다 손쉽게 OpenCV Library를 수정해서 풀스크린을 띄우는 방법입니다. highgui.dll 을 수정한 후 다시 컴파일 해야 합니다. 간단하게 쓰고 싶은 분들을 위해 제가 수정해서 쓰고 있는 highgui.dll 와 highgui.lib 파일을 올립니다. 버전은 OpenCV v1.1 pre1 (2009.6.7 현재 최신버전) 을 기반으로 컴파일 하였습니다.

- DLL 파일은 C:\WINDOWS\system32 에 덮어씌우면 됩니다.
- Lib 파일은 C:\Program Files\OpenCV\lib 에 덮어씌우면 됩니다.
 

highgui110.dll

highgui.lib


o 수정하기
higugui에서 cvNamedWindows()를 관여하는 소스코드는 windows_w32.cpp 파일에 있습니다. 다음과 같은 코드를 추가해 줍니다.

---- windows_w32.cpp ------

if(flags==-1)
{
    flags=0;
    int cx = GetSystemMetrics(SM_CXSCREEN);
    int cy = GetSystemMetrics(SM_CYSCREEN);
    ShowWindow(mainhWnd, SW_MAXIMIZE);
    style = GetWindowLong(mainhWnd, GWL_STYLE);
    style &= ~(WS_DLGFRAME | WS_THICKFRAME);
    SetWindowLong(mainhWnd, GWL_STYLE, style);
    SetWindowPos(mainhWnd, HWND_TOPMOST, -1, -1, cx+3, cy+3, SWP_FRAMECHANGED);
}


- cvNamedWindow( "T9-fullscreen", -1)의 결과


- cvNamedWindow( "T9-fullscreen", 1)의 결과
 

동작여부를 확인해보기 위해 만든 소스코드 입니다. Visual C++ 6.0 에서 작업했습니다.

[소스코드]

OpenCV_fullscreen_viewer.zip

OpenCV_cam_fullscreen.zip


---- T9-opencv.cpp ------
#pragma comment(lib, "cv.lib");
#pragma comment(lib, "cxcore.lib");
#pragma comment(lib, "highgui.lib");

#include <cv.h>
#include <highgui.h>

void main()
{
    IplImage* image = 0;

    image = cvLoadImage("t9t9.jpg");

    cvNamedWindow( "T9-fullscreen", -1); // 전체 화면으로 띄우기 위한 코드
    cvShowImage( "T9-fullscreen", image );
    cvWaitKey(0);

    cvDestroyWindow( "T9-fullscreen" );
}

신고
  • 함께하삼 2009.06.08 10:45 신고

    감사합니다 ㅋ 잼있게 써 먹을수 있겟네염

    1. BlogIcon t9t9 2009.06.12 12:07 신고

      좋은 작품 만드시면 알려주세요~ ^^

  • 2009.06.11 23:25

    비밀댓글입니다

  • BlogIcon 마틴 2009.06.16 10:57 신고

    와우!
    적절한 타이밍에 적절한 예제.
    잘쓰겠습니다.

    1. BlogIcon t9t9 2009.06.18 12:21 신고

      유용하게 사용해주세요~ 작품만드시는 건가요? 만드시면 꼭 보여주세요~

  • 와우 2009.11.18 21:51 신고

    와우 감사!!
    덕분에 10분만에 해결
    작품만드는 건 아니지만.
    담에 작품 만들때도 유용하겠는데여 으흐흐.

    1. BlogIcon t9t9 2009.11.23 12:51 신고

      유용하게 쓰신다니 기분이 좋네요~
      작품 만드시면 꼭 소개해주세요~ ^^

  • 덱스터 2010.05.15 02:11 신고

    windows_w32.cpp에 코드를 정확히 어디에 추가시켜줘야 하나요???

    제공해 주신 dll 파일을 치환해서 이용하니 이상하게 잘되던 프로그램이 cvCloneImage 관련 에러가

    나면서 되질 않네요.. 그래서 직접 다시 컴파일하고 싶은데..

    windows_w32.cpp의 cvNamedWinows 함수의 어디에 추가해도 style이 선언되지 않은 변수라고 뜨면서

    컴파일이 안됩니다. 답변 부탁드립니다! :)))

  • BlogIcon 권정은 2010.05.23 14:49 신고

    안녕하세요 opencv를 공부하고 있는 학생입니다.
    opencv를 공부하면서 어려운 점이 생겨 질문을 드립니다.

    캠의 영상을 입력받아 화면에 띄우고 사진도 그 화면에 동시에 띄우는 단계까지 완성을 시켰는데
    문제는 그 사진을 투명도까지 나타내기위해서 png파일로 저장을 하였습니다.
    하지만 opencv를 이용하여 화면에 나타난 사진을 보니 투명도는 나타나지 않더군요 -_-;

    지금 opencv를 공부하는 초보이기 때문에 많은 어려움을 겪고있습니다.
    제생각에는 cvLoadImage(cvGetSize(),___)에서 2번째 인자에 -1을 입력하면
    파일속성을 그대로 입력받기 때문에 될까 싶어서 해보았지만 무용지물이더라구요..

    이 문제를 어떻게 해결해야하는지 도움을 얻고자 합니다 ...
    꼭 답변 부탁드립니다...ㅠㅠ