1. Static Control(Picture Control) 생성


2. 멤버변수 추가

3. 헤더파일 수정(이미지 변수 선언. 이때 화면에 뿌려줄 이미지를 전역으로 설정 한다.)

4. 열기 버튼 내용 수정 및 윈도우 종료시 이미지 Release

5. Static Control에 이미지 출력
- IplImage형의 이미지를 CvvImage형으로 복사한 뒤 그 핸들을 이용하여 Static Control에 이미지 출력

6. 테스트 결과




Posted by K. Martin

댓글을 달아 주세요

  1. kaysa 2009/07/23 15:11  댓글주소  수정/삭제  댓글쓰기

    잘 보고있습니다.
    다만 MFC를 모르는 사람이 따라가기엔 생략된 부분이 너무 많네요.

    • Favicon of http://martinblog.tistory.com K. Martin 2009/07/24 16:59  댓글주소  수정/삭제

      처음에는 MFC를 잘 모르는 사람도 쉽게 볼 수 있도록 해보려고 했는데,
      말씀처럼 생략을 많이 한건 사실입니다.
      반복되는 내용이 많고 분량 또한 많아서 그렇게 한 것인데,
      다음 강좌때 부터는 조금 더 신경쓸 수 있도록 하겠습니다.
      직접 찾아와 답글까지 달아주시고, 고맙습니다.

  2. foxdiary 2009/08/27 03:01  댓글주소  수정/삭제  댓글쓰기

    죄송한데요.. 이거대로 따라해보는데요..
    프로그램을 실행하면

    자꾸 m_cImage.CopyOf(m_pImage); 이부분에서 엑세스 위반이 되었다고하면서
    실행이 중단됩니다..

    어떻게 해야할까요?
    마틴님께서 올리신 소스코드는 실행이 잘 되는데말입니다..

    • Favicon of http://martinblog.tistory.com K. Martin 2009/08/30 23:56  댓글주소  수정/삭제

      찾아주셔서 고맙습니다.
      m_cImage 변수를 포인터형으로 설정하신게 아닌가 싶은데요,
      잘 살펴보시면 답이 나올꺼라 생각 됩니다.

  3. 저기요 2009/09/12 16:02  댓글주소  수정/삭제  댓글쓰기

    m_cImage 포인터형이 아닌데 저도 foxdiary님과 같은 부분에서 중단됩니다 -_-;

  4. azsure 2009/09/29 10:18  댓글주소  수정/삭제  댓글쓰기

    마틴님 감솨합니다 ^^. 막 영상처리를 시작해서 너무나 감사히 보고 있습니다.
    저도 똑같이 에러났다가, 답변보고 바로 수정했습니다 ^^~ 잘되네요.

  5. psh9378 2009/10/09 21:48  댓글주소  수정/삭제  댓글쓰기

    CDialog::OnPaint(); 구문때문인지 그림이 나오자 마자 지워지는데 저만 그런건가요?

  6. new024 2009/10/28 17:38  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 마틴님 좋은 강좌 잘 보고있습니다.
    궁금한점이 있어 댓글남기는데요.

    그림위에 다른 창이 가리고 그창을 닫으면 그림이 다시 불러와지지않네요
    CDialog::OnPaint(); 를 주석처리하면 그림은 잘 나오는데
    Open 버튼이 그려지지않고요 ㅠ

    좋은 의견있으시면 부탁드립니다 ㅎ
    좋은하루 보내세요

    • Favicon of http://martinblog.tistory.com K. Martin 2009/10/29 09:20  댓글주소  수정/삭제

      화면이 갱신될 때 OnPaint 구문이 제대로 호출되지 않는 것 같은데요, 기회가 닿는다면 소스를 한 번 볼 수 있으면 좋겠습니다.

  7. new024 2009/10/29 11:30  댓글주소  수정/삭제  댓글쓰기

    빠른 답변 감사합니다
    Spy++ 로 메세지를 확인했는데 WMPaint와 Erasebkgnd 재대로 불러와지는데 ㅠㅠ
    마틴님 소스에 CFileDialog로 파일을 입력받게끔만 추가한건데요

    마틴님 소스도 같은 현상이 발생하네요.. OpenCV프로그램을 실행하고 익스플로러라든지 OpenCV프로그램을 가릴수있는 윈도우를 1~2개 띄우고 닫아버리면 이미지가 지워진채로 다시 그려지지않고 OpenCV 프로그램 윈도우릴 이동해야지 다시 그려지네요

  8. psh9378 2009/11/02 17:29  댓글주소  수정/삭제  댓글쓰기

    저의 경우는 static text로 만들었더니 이상했는데 알고보니 paint로 만들어야 되는거였어요 혹시 new024님도 이런 실수 하신건 아닌지...

  9. freejin0321 2010/01/31 19:57  댓글주소  수정/삭제  댓글쓰기

    'CWnd::GetDC': 함수 호출에 인수 목록이 없습니다. '&CWnd::GetDC'을(를) 사용하여 멤버에 대한 포인터를 만드십시오.
    error C2440: '=' : 'CDC *(__thiscall CWnd::* )(void)'에서 'CDC *'(으)로 변환할 수 없습니다.
    이런 오류가 나는데요.. 이건왜이런걸까요??ㅠ.ㅠ 둘다 같은줄에서나는 오류입니다.
    pDC = m_stDisplay.GetDC;
    이소스에서나는데 저렇게 오류가났는데 어떻게 해줘야할지를 모르겠네요..ㅠ.ㅠ 완전 초보다보니..ㅠ.ㅠ

  10. runsorun 2010/02/01 19:19  댓글주소  수정/삭제  댓글쓰기

    MFC 왕초보입니다. OpenCV 나름 다 깔고...여기 나와있는 강좌대로 따라했으나

    1>c:\users\ysoh\documents\visual studio 2008\projects\loadimage\loadimage\loadimagedlg.h(36) : error C2143: 구문 오류 : ';'이(가) '*' 앞에 없습니다.

    와 같은 신택스 오류가 납니다. 아무리봐도 제가 ; 나 *을 빠뜨린거 같지 않습니다 ㅠ 제가 설치를 잘못한것일까요?(그런데 간단한 cvLoadImage 이용한 window 띄우기는 잘 돌아갔습니다...)

  11. freejin0321 2010/02/02 22:29  댓글주소  수정/삭제  댓글쓰기

    DestroyWindow함수 만들때요.. 헤더파일안에다가 그냥 virtual BOOL DestroyWindow(); 이렇게 선언해주고 바로 cpp파일에 BOOL Copen~::DestroyWindow(){ 이런식으로 코딩하면 안되나요? 이부분의 코딩을 바꿀때마다 오류가 바뀌길래요. 지금은 처리되지 않은예제가 있다고 나오면서 실행이제대로안되네요. 클래스창에서 오른쪽 버튼 눌러서 만들경우에 대문자 BOOL이 없던데 소문자도 상관없는건가요? 그리고 그렇게하는거라면 매개변수는 머라고 해줘야하죠??

    • Favicon of http://blog.naver.com/ytkim4558 나그네켄신 2010/04/22 15:50  댓글주소  수정/삭제

      클래스뷰에서 dlg.h 헤더파일을 더블클릭하면 위쪽의 속성창에 아이콘이 늘어나는데 각각 메시지, 이벤트(번개모양), 재정의(큐브모양) 입니다. 이중 재정의 부분을 클릭하시면 destroywindow가 존재합니다. 저도 이부분 헤매다가 알아냈네요 -_-;;

    • Favicon of http://martinblog.tistory.com K. Martin 2010/04/26 00:33  댓글주소  수정/삭제

      답글 고맙습니다.

  12. 드레이크 2010/05/07 10:27  댓글주소  수정/삭제  댓글쓰기

    어제 마틴님의 강좌를 찾고 얼마나 기뻤는지 모릅니다^^
    그래서 오늘부터 하나씩 따라하고 있는데요 버튼을 눌렀을때 이미지가 잠깐 보이고 사라지는 이유눈 왜일까요??
    분명 똑같이 만들었는데요 ㅜㅜ

    • Favicon of http://martinblog.tistory.com K. Martin 2010/05/10 08:06  댓글주소  수정/삭제

      기쁘셨다니 저도 뿌듯합니다. 고맙습니다.

      Invalidate(FALSE); 확인 하세요.
      그것이 아닌 다른 이유는 저도 잘 모르겠네요 ^^

  13. 롤리랑 2010/05/11 02:01  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~
    저는 mfc를 처음 하는 학생이에요~^^
    알려주신데로 따라햇는데~
    컴파일을하면 serial.exe에 문제가 있어서 프로그램을 종료해야 합니다
    라는 구문이 뜨면서 꺼져요 ㅠㅠ
    왜그런지 꼭좀 알려주세요~

  14. 송지혜 2010/05/23 20:55  댓글주소  수정/삭제  댓글쓰기

    저 고대로 다 따라했는데,, 오류가나네요 ㅜㅜㅜ
    0x5e0a28ex(highgui200.dll)에 처리되지 않은 예외가 있습니다. 엑세스 위반이 발생했습니다.
    라고 뜨는데,,, 도와주세요ㅠ ㅜ아무리해도 해결되지 않습니다..

    • 송지혜 2010/05/23 21:00  댓글주소  수정/삭제

      앗,, 이상하게 이런오류가 한 30번떴는데
      익스플로어 오류도 같이떳거든요, 그런데 갑자기 되네요__---모지..ㅋㅋㅋㅋ아무튼 너무기쁩니다 세상을날아갈거같아요 앞으로남은 단계도 잘되길..감사해요 마틴님!ㅋㅋ

  15. 김종선 2010/05/26 01:39  댓글주소  수정/삭제  댓글쓰기

    m_pImage 를 초기화해주지 않아서 발생한 에러 입니다.

    OnInitDialog()에
    m_pImage = NULL; 요거 한줄 추가해주세요.

    • Favicon of http://martinblog.tistory.com K. Martin 2010/05/27 18:17  댓글주소  수정/삭제

      답글 고맙습니다.

    • uni 2011/10/31 23:54  댓글주소  수정/삭제

      m_pImage에서 문제가 발생해서 계속 해맸는데
      덕분에 해결 됬네요.. 감사합니다..ㅠ
      아 마틴님~ 오늘부터 마틴님 강좌보고 열심히 하고 있는 학생입니다~ 좋은 강좌 감사드려요~

  16. 이지미 2010/06/08 20:55  댓글주소  수정/삭제  댓글쓰기

    컴파일을 하니깐 TODO <파일설명>에 문제가 생겨서 되지 않는다는 창이 뜨는데 이건 왜 그런거죠?

    제가 잘못 따라한것 같아서 다시 해봤는데도 이런 오류창이 뜨네요;;ㅜ;;;;;

  17. Favicon of http://blog.naver.com/gorila222 송주섭 2010/11/09 04:25  댓글주소  수정/삭제  댓글쓰기

    너무 답답해서 글올립니다..
    mfc가 완전 생초보라 ㅜ,ㅜ
    비주얼6.0을 쓰고 있는데
    따라하다가 몇일째 에러 못잡고 있습니다 ㅜㅜ
    realDlg.cpp(172) : error C2065: 'm_pImage' : undeclared identifier
    realDlg.cpp(181) : error C2065: 'm_cImage' : undeclared identifier
    realDlg.cpp(181) : error C2228: left of '.CopyOf' must have class/struct/union type
    realDlg.cpp(182) : error C2228: left of '.DrawToHDC' must have class/struct/union type
    realDlg.cpp(201) : error C2440: '=' : cannot convert from 'struct _IplImage *' to 'int'
    아랫분이 OnInitDialog()에
    m_pImage = NULL; 요거 한줄 추가해도 안되고 ㅜ,ㅜ 도와주십쇼

  18. Sirano 2011/02/10 14:31  댓글주소  수정/삭제  댓글쓰기

    여기서 많은 정보를 얻어 가고 있습니다. 이 강좌를 보고 따라해보고 있는데
    웹캠이 따로 없는 상태에서 내장된 노트북 캠으로 영상을 퍼올려고 하는데
    에러하나 없이 실행은 되지만 검은색 화면밖에 뜨질 않네요,
    이게 내장된 노트북 캠이라서 그런가요? 아님 다른 문제인가요 ?

    • Favicon of http://martinblog.tistory.com K. Martin 2011/02/11 09:49  댓글주소  수정/삭제

      노트북 내장 캠이라고 해서 안될 이유는 없습니다.
      캠의 설정 문제가 아닐까 조심스럽게 추측해 봅니다.

  19. Favicon of http://blog.naver.com/ytkim4558 나그네켄신 2011/03/05 11:22  댓글주소  수정/삭제  댓글쓰기

    opencv2.2에서는 CvvImage를 빼버렸네요.. 멀로 대체해야하징.. ㅠㅠ

    • Favicon of http://martinblog.tistory.com K. Martin 2011/03/11 16:27  댓글주소  수정/삭제

      아, 그부분은 아직 확인하지 못했습니다.
      다른 방법이 있으시면 저에게도 꼭 알려주시면 고맙겠습니다.

  20. 박성훈 2011/04/02 21:20  댓글주소  수정/삭제  댓글쓰기

    1개의 경고가 떴는데요.
    파일:cvcompat.h 이고
    현재 코드 페이지(949)에서 표시할 수 없는 문자가 파일에 들어 있습니다. 데이터가 손실되지 않게 해당 파일을 유니코드 형식으로 저장하십시오.

    무슨문제인가요?

    • Favicon of http://martinblog.tistory.com K. Martin 2011/04/05 09:06  댓글주소  수정/삭제

      글세요 저도 가끔 그런 오류가 나더군요.
      해당 경고 부분의 공백을 지웠다 늘렸다 하면서 해결했었던 기억이 있습니다만...

  21. mfc 공부하는 사람 2011/08/22 18:20  댓글주소  수정/삭제  댓글쓰기

    잘 봤습니다.
    그럼 저기 픽쳐컨트롤에 그냥 사각형이나 삼각형같은 도형을 그려넣을땐 어떻게 하나요?

  22. mfc 초보 2011/09/20 20:22  댓글주소  수정/삭제  댓글쓰기

    OpenCV2.2 버전 이후 CvvImage 함수를 더 이상 지원하지 않는 다고 들었는데요.임의로 CvvImage를 추가하는 방법은 없는가요? 아니면 다른 대체 함수는 없나요?

    • Favicon of http://martinblog.net K. Martin 2011/09/22 18:15  댓글주소  수정/삭제

      아.. 제가 2.0버전 이후로 QT로 전향해서 그 뒤에 어떤 문제가 있는지 잘 모르겠네요. 답을 못드려서 유감입니다.

  23. 초보 2011/09/26 20:24  댓글주소  수정/삭제  댓글쓰기

    제가 정말 초보 인데 궁금한게 있습니다. 마틴님 소스 열어서 하면 되는데 제가 처음부터 일일이 하면 안될까요? 위에부분에서 1번은 똑같이 하고 2번을 하려고 하는데 범주랑 컨트롤 형식 이 고르는게 없더라구요.. 어떻게 된일인지요.... 꼭 답변 부탁드립니다. 지식이 너무 낮아 죄송합니다. ㅠㅠ

  24. 달걀한개 2011/10/04 16:46  댓글주소  수정/삭제  댓글쓰기

    사용툴 : VS2008
    설정 : 1장에서 보여준 화면 그대로 설정 했음.
    문제점 : 오류, 경고 없음.
    프로그램 실행후 버튼을 클릭 했을시 사진불러 오는 작업이 시행이 안됨.
    이후, 디버깅을 통하여 cvLoadImage 함수 반환값이 없다는 것을 알게되었음.
    본인이 작성한 코드를 예제 코드에 덧씌워 보았지만 실행은 잘되는 상태.

    뭐가 문제일까요?

  25. 조알 2012/01/04 09:21  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 마틴님, MFC 로 윈도우 만들고 하는게 거의 해본 적이 없어서 문제가 좀 있나 봅니다..;;;그래서 질문하나 하겠습니다!
    강좌 1에서 올려주신 소스는 잘 돌아갔습니다, 그리고 이제 강좌 2로 또 넘어가서 단계별로 따라해보려고 하는 중인데요, 여기서 문제 발생합니다..
    강좌2에 따라서 소스 수정해서 돌렸는데,
    TODO: <파일 설명> 에 문제가 있어서 프로그램을 종료해야 합니다.
    라는 메세지와 함께 오류가 뜹니다!
    혹시나 해서 올려주신 강좌2 소스를 보고 비교해서 헤더랑 cpp 파일에 제대로 수정했는데, 안되네요?
    그런데!!!!!! 마틴님께서 올려주신 강좌2 소스를 돌리면 문제없이 실행됩니다...

    그렇다면.. 소스코드 수정해야되는 것 말고도 강좌1에서 강좌2로 넘어갈때 뭐 또 해야되는 작업이 있는건가요?
    (1번 static control, 2번 멤버변수 추가 ===> 이 부분을 어떻게 해야되는 건지 몰라서 안하긴 했는데요...;;;)

    너무 초보라 죄송하고, 혹시 원인을 아신다면 조언 부탁드릴게요!

  26. Favicon of http://blog.naver.com/geworm 김주영 2012/01/18 16:01  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 강좌 잘 보고 있습니다.
    open cv 랑 MFC를 거의 다뤄본적이 없어서 책과 강좌를 보면서 공부하고있는데요 다름이 아니라 궁금한점이 있어서 댓글 올립니다.
    위에 강좌대로 차례로 수행한뒤 실행을 해보았으나 동작이안되서
    마틴님께서 올려주신 소스를 비교하면서 찾아보니까 틀린데가 두군대 정도가 있었는데요 바로 이 곳입니다.

    COpenCVtest20120118Dlg::COpenCVtest20120118Dlg(CWnd* pParent /*=NULL*/)
    : CDialog(COpenCVtest20120118Dlg::IDD, pParent)
    , m_pImage(NULL) //<---- 첫번째 틀린부분
    {
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }

    void COpenCVtest20120118Dlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_ST_DISPLAY, m_stDisplay); //두번째 틀린부분

    }

    제가 MFC에 너무 무지해서 그러는데 위에 두곳의 틀린부분에대해 설명좀 해주시면 감사하겠습니다. 그럼수고하세요

    • Favicon of http://blog.naver.com/geworm 김주영 2012/01/18 16:15  댓글주소  수정/삭제

      창을 다시생성해보니
      DDX_Control(pDX, IDC_ST_DISPLAY2, m_stDisplay2);
      이부분이 컨트롤 변수인데.... 자동으로 추가되었내요;;;

      음....
      , m_pImage(NULL) // 이부분이 위에 댓글에 있던 생성자 초기화부분인가??
      아 잘모르겟내 ㅠㅠ

  27. 티아루나 2012/03/06 15:21  댓글주소  수정/삭제  댓글쓰기

    DestroyWindow()는 어떻게 만드는건가요?