본문 바로가기
Programming/Opencv(C++, MFC)

[MFC로 OpenCV 시작하기] 문제점 해결 방법

by MVP 2020. 11. 24.

martinblog.net/821?category=262126

 

OpenCV 강좌 01. MFC로 OpenCV 시작하기 (이미지 열기)

0. OpenCV 다운로드 및 설치 - 아래 사이트에서 OpenCV 1.1 pre 버전을 다운로드 받은 후 설치 OpenCV 라이브러리 다운로드 페이지 http://sourceforge.net/projects/opencvlibrary 1. 새 프로젝트의 생성 - 본..

martinblog.net

 

이 글은 위 블로그 내용을 참조했을 때 발생한 문제점 해결방법을 정리한 글이다.

 

1. 특정 dll이 없다는 에러가 발생하여 실행이 안될 때

다른거 하지말고 일단 VisualStudio를 재실행해보자. 그래도 안되면 구글링 무한 루프의 세계로..

 

2. Opencv에 CvvImage가 없다면?

comvision.tistory.com/entry/OpenCV%EC%97%90%EC%84%9C-%EC%82%AC%EB%9D%BC%EC%A7%84-CvvImage-%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A5%BC-MFC%EC%99%80-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0

 

OpenCV에서 사라진 CvvImage 클래스를 MFC와 연동하기

글을 쓰기에 앞서 CvvImage 클래스는 2.2 버전부터 OpenCV에서 지원을 하지 않습니다. 테스트 환경은 OpenCV 2.3.0, 윈도우 7, Visual Studio 2010 입니다. 다른 환경에서도 무난히 될거라고 생각합니다. ^^;; 아.

comvision.tistory.com

위 블로그 내용 중 CvvImage.cpp, CvvImage.h 다운로드해서 자신의 프로젝트 폴더에 옮긴후 헤더 파일 및 소스 파일에서 기존 항목으로 추가하면 해결된다.

 

3. 디버깅 없이 시작 시 프로그램이 멈춰버린다면? 

 

OpenCV 강좌 02. 다이얼로그(Static Control)에 이미지 출력하기의 예제대로 작성 후 디버깅을 시작해보면 다음과 같은 예외가 발생할 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
BOOL Copencv_testDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
 
    // 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.
 
    // IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다.
    ASSERT((IDM_ABOUTBOX & 0xFFF0== IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);
 
    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }
 
    // 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
    //  프레임워크가 이 작업을 자동으로 수행합니다.
    SetIcon(m_hIcon, TRUE);            // 큰 아이콘을 설정합니다.
    SetIcon(m_hIcon, FALSE);        // 작은 아이콘을 설정합니다.
 
    // TODO: 여기에 추가 초기화 작업을 추가합니다.
    m_pImage = NULL// 초기화를 해줘야한다!
    return TRUE;  // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
}
cs

 

이럴 경우 위 코드와 같이 OnInitDialog 함수에서 m_pImage = NULL; 로 초기화를 해야한다.