1. OpenCV 소개
OpenCV 는 오픈소스 컴퓨터 비전라이브러리 중 하나입니다. 컴퓨터 영상처리를 대중화했다는 평가를 받을 정도로 낮은 진입장벽을 가지고 있지만, 기능이나 성능이 부족한 것은 전혀 아닙니다. 크로스플랫폼을 지원하여 기술의 범용성이 넓고, 대부분의 영상처리는 OpenCV 만으로도 해결할 수 있습니다. 텐서플로우 등과 병행해 머신러닝과 딥러닝 프로젝트를 진행하는데도 많이 사용됩니다. BSD라이센스를 채택하여, 상업적 이용도 가능하기에 어떤 프로젝트를 진행할 때에도 무리없이 채택할 수 있습니다.
2. OpenCV 설치
개발에 사용하기 위한 OpenCV 소스는 공식 홈페이지에서 플랫폼별로 빌드하여 배포하고 있습니다. 윈도우 버전은 64비트버전만 빌드되어 있습니다. 32비트 프로그램을 개발하기 위해서는 별도의 빌드과정이 필요하며, 이는 추후 포스팅에서 다룰 예정입니다. 아래 링크에서 필요한 버전의 윈도우 파일을 다운로드합 니다. (19년 6월 9일 기준으로 최신버전은 4.1.0 버전입니다.) 다운로드 된 설치 프로그램을 실행하면 경로를 지정해 주는 창이 나오는데, 이는 마음대로 지정해 주셔도 됩니다. 단, 상위 디렉토리 중 한글 이름의 폴더가 있는경우 오류가 날 수 있어 기본 C 드라이브를 지정해 주는 것을 추천드립니다. 저는 C드라이브에 폴더를 하나 만들어, 설치경로를 "C:\OpenCV"로 지정했습니다.
3. Visual Studio 프로젝트 설정하기
이제, Visual Studio 프로젝트를 설정할 차례입니다. 몇 가지 설정을 해주어야 OpenCV를 활용할 수 있는데 이 과정이 꽤 귀찮을 수 있습니다. 저는 빈 프로젝트 파일에 한 번 설정을 해 두고, 필요할때 마다 프로젝트 파일을 복사해서 사용하고 있습니다. OpenCV를 활용한 개발이나, 프로젝트 진행을 여러차례 계획하고 있으시다면 이 방법을 고려해 보시기 바랍니다.
먼저, Visual Studio 에서 빈 프로젝트를 하나 만들고, 프로젝트의 소스파일 폴더에 빈 .cpp파일을 하나 만들어 줍니다. 물론 OpenCV를 적용할 프로젝트 파일과 소스파일이 이미 있으시다면, 이 과정은 생략 해도 됩니다. 솔루션 탐색기에서 프로젝트 제목을 우클릭하고 속성(R)을 누르거나, 제목을 좌클릭 한 후, Alt + Enter를 눌러 프로젝트 속성페이지를 열어줍니다.
지금부터 설명할 두 단계가 가장 많이 실수하시는 부분입니다. 속성 창의 좌측 상단의 구성을 "모든구성"으로, 플랫폼을 x64로 설정합니다. [C/C++] - [일반] - 추가 포함 디렉터리, [링커] - [일반] - 추가 라이브러리 디렉터리를 추가하는 단계입니다. [C/C++] - [일반] - 추가 포함 디렉터리에는
{OpenCV 설치경로}\opencv\build\include 를 추가해줍니다.
[링커] - [일반] - 추가 라이브러리 디렉터리에는
{OpenCV 설치경로}\opencv\build\x64\vc15\lib 를 추가해 줍니다.
저 같은 경우에는 C:\OpenCV\opencv\build\include 와 C:\OpenCv\opencv\build\x64\vc15\lib 를 각각 추가해 줬습니다.
디버그와 빌드 상황에서 함께 컴파일할 lib를 지정해 주어야 합니다. 상단의 구성을 "모든구성"에서 "Debug"로 바꾸고, [링커] - [입력] - 추가 종속성에 opencv_world410d.lib을 추가해 줍니다. 추가하는 과정은 위에서 디렉터리를 추가할 때와 거의 같습니다. 추가 종속성 창에서 경로를 찾는 것이 아니라 직접 라이브러리의 이름을 입력해 주어야 한다는 차이가 있습니다. 다음 차례로 상단의 구성을 "Debug"에서 "Release"로 바꾸고, [링커] - [입력] - 추가 종속성에 opencv_world410.lib을 추가해 줍니다. Debug 상황과 Release 상황에서 추가해 줄 라이브러리가 다르다는 점에 주의합시다.
마지막으로 디버거의 환경변수를 설정해 줄 차례입니다. 시스템 환경변수를 설정해 주는 방법과, Visual Studio 프로젝트 설정에 추가해주는 방법, 직접 dll을 디렉토리에 복사해 주는 방법까지 여러 방법이 있습니다. 직접 dll을 복사하는 방법은 추천드리지 않습니다. 시스템 환경변수를 사용하는 방법은 큰 문제는 없으나 과정이 비교적 복잡하여 주로 프로젝트 설정을 이용해 설정합니다. 좌측 구성속성의 디버그 탭에서 "환경" 항목에 PATH={OpenCV 설치경로}\opencv\build\x64\vc15\bin;%PATH% 를 작성해 줍니다. 저의 경우에는 PATH=C:\OpenCV\opencv\build\x64\vc15\bin;%PATH%를 추가해 주었습니다.
4. 테스트
모든 설정을 완료했습니다. openCV에서 기본으로 제공하는 소스코드로 설정이 잘 적용되었는지 테스트 해 봅시다. {OpenCV 설치경로}\opencv\sources\samples\cpp 의 코드 중 하나를 복사하여 사용합니다. 아래의 opencv_version.cpp를 사용하셔도 됩니다. 해당 코드를 복사 한 뒤, ctrl+F5로 실행시켜 테스트 해 봅니다. 디버그 콘솔에 Welcome to OpenCV 4.1.0 이 성공적으로 표시되면 잘 적용된 것입니다.
// 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;
}
참고자료
[1] OpenCV Docs (https://docs.opencv.org/master/)
[2] OpenCV License (https://opencv.org/license/)