본문 바로가기

언어/OpenCV

Visual Studio 2017에서 OpenCV 3.4.2를 사용하는 방법

출처: http://webnautes.tistory.com/1132


미리 빌드되어 배포되는 윈도우용 OpenCV 라이브러리 3.4.2을 Visual Studio 2017에서 사용하기 위해 필요한 과정을 설명합니다.



마지막 업데이트 - 2018. 7. 9




1. OpenCV 깃허브(github)에서는 opencv-3.4.2-vc14_vc15.exe를 다운로드 받습니다.

https://github.com/opencv/opencv/releases




2. 다운로드 받은 파일의 이름 opencv-3.4.2-vc14_vc15.exe 에서도 알 수 있듯이  vc14(Visual Studio 2015)와 vc15(Visual Studio 2017)를 위해 미리 빌드된 라이브러리가 배포되고 있습니다.


실행하면 압축을 해제할 위치를 물어봅니다. 위치 변경없이 바로 Extract를 클릭하면 설치 파일이 위치한 곳에 압축이 풀립니다.  


디폴트 폴더 이름인  opencv를 변경할 수 없기 때문에 기존에 설치된 OpenCV 라이브러리에 덮어쓰기가 될 수 있습니다.


가급적이면 압축을 풀고 이름을 변경한 후에 해당 위치로 복사하세요.




3. 압축을 풀어 생성된 opencv 폴더는 미리 빌드된 라이브러리가 포함되어 있는 build 폴더와 OpenCV  소스 코드가 포함되어 있는 sources 폴더로 구성되어 있습니다.




opencv 폴더 이름을  적당한 이름으로 변경 후 원하는 위치로 복사해줍니다.

본 포스팅에서는 OpenCV 라이브러리 폴더가 C:\opencv-3.4.2 에 있는 것으로 가정하고 진행합니다.




4. Visual Studio의  메뉴에서 파일 > 새로 만들기 > 프로젝트를 선택합니다.



5. 왼쪽 항목에서 Visual C++ > Windows 데스크톱을 선택하면 중앙에 보이는 항목에서  Windows 데스크톱 마법사를 선택합니다.

(예전에 있던 Win32 콘솔 프로젝트가 Visual Studio 버전업에 따라 사라져서 대신 사용합니다.)




6. 응응 프로그램 종류콘솔 응용 프로그램을 선택하고 빈 프로젝트를 체크합니다.


SDL을 체크하면 보안상 대체해서 사용해야 하는 함수들을 알려줍니다. 예를 들어 scanf() 대신 scanf_s() 를 사용하라는 메시지가 보입니다.




7. 솔루션 탐색기소스 파일 항목에서  마우스 우클릭하면 보이는 메뉴에서 추가 > 새 항목을 선택합니다.




8. C++ 파일(cpp)를 선택하고 추가 버튼을 클릭합니다.




소스 파일 항목에 cpp 파일이 추가됩니다.




9. 툴바의 솔루션 플랫폼을  x64로 변경합니다.




현재는 빌드된 64비트용(x64) 라이브러리만 배포되고 있기 때문에 32비트용(x86)이 필요한 경우에는  OpenCV 소스 코드를 가지고 컴파일해야 합니다.




경험상 Visual Studio 버전이 차이나도 동작할 수는 있지만 오동작하는 발생하면 다시 라이브러리를 빌드해야 합니다



32비트용으로 OpenCV 소스코드 컴파일시 다음 포스팅을 참고하시면 도움이 될 듯합니다.



Visual Studio 2017, Python 3용으로 OpenCV 3.4.2 빌드 하기 (opencv_contrib 포함)

http://webnautes.tistory.com/1036





10. 솔루션 탐색기에서 다음처럼 프로젝트 이름을 선택하고 메뉴에서 프로젝트 > 속성을 선택합니다.




11. 속성 페이지 창 왼쪽 위에 보이는 구성모든 구성으로 변경합니다.

Debug 모드와 Release 모드의 공통 부분을 한번에 설정할 수 있습니다.




12. 왼쪽 항목에서 C/C++를 선택하고 추가 포함 디렉터리 항목에 OpenCV 헤더 파일 위치를 입력합니다.

C:\opencv-3.4.2\build\include




13. 왼쪽 항목에서 링커를 선택하고 추가 라이브러리 디렉터리 항목에 OpenCV 라이브러리 파일 위치를 입력합니다.

C:\opencv-3.4.2\build\x64\vc15\lib




14. 왼쪽 항목에서 디버깅을 선택하고 환경 항목에  OpenCV 라이브러리  DLL 파일 위치를 입력합니다.

PATH=C:\opencv-3.4.2\build\x64\vc15\bin;%PATH%




15. 구성활성(Debug)로 변경하고 변경된 설정 저장 여부를 물어보는  메시지 박스가 보이면 예 버튼을 클릭합니다..




16. 왼쪽 항목에서 링커 > 입력을 선택하고 추가 종속성 항목의  값 맨 앞에 디버그용 라이브러리 이름을 입력합니다. 이름 뒤에 세미콜론을 넣어줘야 합니다.


opencv_world342d.lib;




17. 구성Release로 변경하고 변경된 설정 저장 여부를 물어보는  메시지 박스가 보이면 예 버튼을 클릭합니다..




18. 왼쪽 항목에서 링커 > 입력을 선택하고 추가 종속성 항목의 값 맨 앞에 릴리즈용 라이브러리 이름을 입력합니다. 이름 뒤에 세미콜론을 넣어줘야 합니다.


opencv_world342.lib;




19. 이제 확인 버튼을 눌러서 속성 페이지 창을 닫습니다.



20. 다음 경로에 있는 소스 코드를  테스트에 사용합니다.

C:\opencv-3.4.2\sources\samples\cpp\videocapture_basic.cpp


/**
@file videocapture_basic.cpp
@brief A very basic sample for using VideoCapture and VideoWriter
@author PkLab.net
@date Aug 24, 2016
*/

#include <opencv2/opencv.hpp>
#include <iostream>
#include <stdio.h>

using namespace cv;
using namespace std;

int main(int, char**)
{
Mat frame;
//--- INITIALIZE VIDEOCAPTURE
VideoCapture cap;
// open the default camera using default API
cap.open(0);
// OR advance usage: select any API backend
int deviceID = 0;             // 0 = open default camera
int apiID = cv::CAP_ANY;      // 0 = autodetect default API
 // open selected camera using selected API
cap.open(deviceID + apiID);
// check if we succeeded
if (!cap.isOpened()) {
cerr << "ERROR! Unable to open camera\n";
return -1;
}

//--- GRAB AND WRITE LOOP
cout << "Start grabbing" << endl
<< "Press any key to terminate" << endl;
for (;;)
{
// wait for a new frame from camera and store it into 'frame'
cap.read(frame);
// check if we succeeded
if (frame.empty()) {
cerr << "ERROR! blank frame grabbed\n";
break;
}
// show live and wait for a key with timeout long enough to show images
imshow("Live", frame);
if (waitKey(5) >= 0)
break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}



프로젝트의 소스 파일로 해당 코드를 복사해오고 나서 Ctrl + F5를 눌러서 컴파일 및 실행시켜 봅니다.

실행에 문제가 있다면 백신의 실시간 보호 기능 때문일 가능성이 높습니다.



21. 툴바의  솔루션 구성이 Debug / Release 로 설정되어 있을 때, 각각 문제 없이 동작하는지 확인해봅니다.





22. 참고로 F5를 눌러서 실행하면 디버거와 함께 프로그램이 실행되고,  Ctrl + F5를 눌러서 실행하면 프로그램만 실행됩니다.


문제 없다면 웹캠으로부터 캡처된 영상을 보여주는 창이 보입니다.

ESC 키를 누르면 실행이 중단됩니다.