본문 바로가기

OpenCV

Qt Creator에서 OpenCV Pre-built 버전 사용하기 (MSVC 2019 64bit)

  • OpenCV 4.10.0
  • Qt 6.5.0, Qt Creator 11.0.1

윈도우용 OpenCV 4.10.0 버전의 Pre-built 라이브러리는 VC16(MSVC 2019)에서 빌드된 dll, lib 파일을 제공한다. 따라서 소스 코드를 직접 빌드할 필요 없이 여타 3rd party 라이브러리를 사용하듯 OpenCV의 기능을 간편하게 이용할 수 있다. 하지만 opencv_contrib 모듈은 포함되어 있지 않기 때문에 관련 기능들은 사용할 수 없다. 아울러 Qt 기반의 사용자 인터페이스를 사용할 수 없다. 예를 들어 highgui 헤더의 imshow()를 호출했을 때 아래와 같이 윈도우가 제공하는 기능에 차이가 있다.

Pre-built 버전을 사용하면 Qt 기반의 사용자 인터페이스를 사용할 수 없다 (왼쪽: Pre-built; 오른쪽: 소스코드 직접 빌드)

opencv_contrib 모듈이 반드시 필요한 상황이 아니라면 pre-built 라이브러리를 사용하는 것도 적절한 선택인 것 같다. 개인적인 생각으로 Qt 사용자 인터페이스를 사용할 수 없다는 것이 중요한 부분은 아닌 것 같다. 끝으로 윈도우용 OpenCV 설치 문서에서는 pre-built 라이브러리는 MS 비주얼 스튜디오에서만 사용할 수 있다고 되어있지만, 빌드 툴을 MSVC로 지정한다면 Qt Creator에서도 사용할 수 있다.

다운로드

OpenCV/Get Started에 접속하면 아래와 같은 화면을 볼 수 있다.

Building From SourceNo로 선택하고 Run this Command에 나타나는 github 링크를 클릭하자.

여기서 opencv-4.10.0-windows.exe를 클릭하면 같은 이름의 파일이 다운로드된다. 만약 소스 코드를 다운로드받고 싶으면 그 아래에 Source code (zip)을 클릭하자.

설치

다운로드된 exe 파일을 실행하면 7-Zip self-extracting archive라는 이름의  압축 해제 창이 뜬다.

원하는 경로를 지정하고 Extract 버튼을 클릭하면 압축 해제가 진행된다.

압축 해제가 완료되면 지정된 경로에 opencv라는 이름의 폴더가 생기고 그 안에 압축되어 있던 파일들이 위치한다. 만약 7-Zip self-extracting archive 창에서 기본 경로를 그대로 사용했다면 exe 파일과 같은 위치에 opencv 폴더가 생길 것이다.

opencv 폴더 안으로 들어가 보면 build, sources 폴더가 있는데 build 폴더에는 pre-built 라이브러리가 있고 sources 폴더에는 pre-built 라이브러리의 소스 코드와 예제 코드 및 샘플 영상이 들어 있다.

pre-built 라이브러리 사용에 필요한 파일들은 아래 경로에서 확인할 수 있다.

  • 헤더 파일 (*.h): build\include\opencv2
  • 라이브러리 파일 (*.lib): build\x64\vc16\lib
  • 공유 라이브러리 파일 (*.dll): build\x64\vc16\bin

공유 라이브러리 파일을 환경 변수에 등록하면 설치는 마무리 된다.

환경 변수 등록

환경 변수 편집 창에 공유 라이브러리 파일이 위치한 폴더의 전체 경로를 추가하자.

설치 확인

Qt Creator에서 Plain C++ Application을 위한 새 프로젝트를 만들자.

이 때 Kit Selection에서 MSVC2019를 선택하는 것을 잊지 말자.

프로젝트를 생성한 후 프로젝트에 OpenCV 라이브러리를 추가하자.

Library file:opencv_world4100.lib 파일을 지정하고, Include path:include 폴더를 지정하자. 그리고 windows: 그룹 박스에서 Add "d" suffix for debug version 체크 박스를 선택하자.

생성된 프로젝트 파일의 내용은 다음과 같다.

TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += \
        main.cpp

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../LIBRARY/3rd/OpenCV/4.10.0/prevuilt/build/x64/vc16/lib/ -lopencv_world4100
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../LIBRARY/3rd/OpenCV/4.10.0/prevuilt/build/x64/vc16/lib/ -lopencv_world4100d

INCLUDEPATH += $$PWD/../../../../LIBRARY/3rd/OpenCV/4.10.0/prevuilt/build/include
DEPENDPATH += $$PWD/../../../../LIBRARY/3rd/OpenCV/4.10.0/prevuilt/build/include

이제 main.cpp 파일의 내용을 다음과 같이 수정하자. 원본 소스 코드는 sources\samples\cpp\opencv_version.cpp이다.

// This file is part of OpenCV project.
// It is subject to the license terms in the LICENSE file found in the top-level directory
// of this distribution and at http://opencv.org/license.html

#include <opencv2/core/utility.hpp>
#include <iostream>

static const std::string keys = "{ b build | | print complete build info }"
                                "{ h help  | | print this help           }";

int main(int argc, const char* argv[])
{
    cv::CommandLineParser parser(argc, argv, keys);
    parser.about("This sample outputs OpenCV version and build configuration.");
    if (parser.has("help"))
    {
        parser.printMessage();
    }
    else if (!parser.check())
    {
        parser.printErrors();
    }
    else if (parser.has("build"))
    {
        std::cout << cv::getBuildInformation() << std::endl;
    }
    else
    {
        std::cout << "Welcome to OpenCV " << CV_VERSION << std::endl;
    }
    return 0;
}

프로젝트를 빌드하고 QtCreator의 Application Output 창에 다음과 같은 메시지가 나타나면 OpenCV가 정상 동작하는 것을 확인할 수 있다.

위의 예제 뿐만 아니라 sources\samples\cpp 폴더 내에 있는 어떤 소스 코드라도 빌드해서 확인해 볼 수 있다.