본문 바로가기
OpenCV

OpenCV ] 환경설정 및 프로젝트 만들기 + 재사용을 위한 템플릿 내보내기 (C++)

by eteo 2022. 8. 6.

 

1. 홈페이지 접속 후 다운로드

https://opencv.org/

 

 

 

 

 

 

2. 압축 풀기

 

 

설치 후 폴더 구조

 

 

opencv-build-x64-vc15 폴더 내에 Visual Studio 2017/2019 용 OpenCV DLL파일, 유틸리티와 OpenCV LIB 파일이 있다.

 

 

 

 

3. 환경설정

 

내PC 오른쪽 클릭-속성-고급시스템 설정-고급 탭에서 환경변수 클릭

 

사용자 변수 새로 만들기

변수 이름 : OPENCV_DIR

값 : C:\opencv\build

 

 

 

사용자 변수 - PATH 환경변수 더블클릭 - 새로만들기

%OPENCV_DIR%\x64\vc15\bin

추가

 

 

 

cmd 창을 열어 확인 잘 추가 되었는지 확인

 

 

4. Visual Studio 에서 새 프로젝트 만들기

 

 

 

 

프로젝트 생성

 

 

 

 

 

OpenCV 라이브러리는 64비트로 빌드되어 있기 때문에 x64 플랫폼을 사용해야 함

 

 

main.cpp 파일을 만들어 놓고

 

 

프로젝트 오른쪽 클릭해서 속성 편집

 

 

구성은 모든구성 또는 활성(Debug)로 하고 플랫폼이 x64로 되어있는지 확인함

C/C++ - 일반 - 추가 포함 디렉터리에서

 

C:\opencv\build\include 추가

또는 PATH에 추가해 놨기 때문에 $(OPENCV_DIR)\include; 라고 해도 된다.

 

 

 

 

 

 

 

 

링커 - 일반 - 추가 라이브러리 디렉터리 에서

 

C:\opencv\build\x64\vc15\lib 추가

또는 $(OPENCV_DIR)\x64\vc15\lib;

 

 

 

 

 

링커 - 입력 - 추가 종속성에서 Debug 버전이면 opencv_world[버전]d.lib Release 버전이면 opencv_world[버전].lib 를 넣으면 된다.

 

설정 끝

 

 

 

 

 

5. 영상 출력하는 샘플 코드

 

프로젝트 폴더 내에 .bmp 파일을 다운 받는다.

lenna.bmp
0.75MB

 

#include "opencv2/opencv.hpp"
// OpenCV 에서 사용하는 다양한 클래스와 함수가 선언되어 있는 헤더파일 포함
#include <iostream>

using namespace cv;
using namespace std;

int main()
{

	cout << "Hello OpenCV " << CV_VERSION << endl;
    // OpenCV 라이브러리의 버전 출력

	Mat img;
    // Mat 클래스 객체 생성. OpenCV 에선 영상 데이터를 범용 행렬 클래스인 Mat 클래스 이용
    
	img = imread("lenna.bmp");
    // imread 함수를 사용하여 파일을 불러와 img 객체에 저장

	if (img.empty()) {
		cerr << "Image load failed!" << endl;
		return -1;
	}
    // 파일 불러오기 실패했을 때의 예외 처리 코드

	namedWindow("image");
    // namedWindow 함수를 이용하여 새로운 창 생성. 창의 이름은 image
    
	imshow("image", img);
    // imshow 함수를 사용하여 image라는 창에 img 객체가 갖고있는 영상을 출력

	waitKey(0);
    // 사용자의 키보드 입력을 기다리는 함수.
    // 매개변수의 디폴트값은 0으로 무한대기. 특정 키 입력을 기다리는 것도 가능

	return 0;
}

 

 

 

 

 

 

 

 

 

6. 영상 파일의 확장자 변환하여 저장하는 코드

 

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char* argv[])
{
	// int argc 는 main()에 전달되는 인수의 갯수
    // char* argv[]는 전달된 데이터로 char 포인터형 배열. argv[0] 값은 프로그램의 실행경로
    
	if (argc < 3) {
		cout << "Usage: ocvrt.exe <src_image> <dst_image>" << endl;
		return 0;
	}

	// 전달된 두 번째 인자를 읽어 img 객체에 저장함
	Mat img = imread(argv[1], IMREAD_UNCHANGED);
    // IMREAD_UNCHANGED 입력 파일의 컬러속성을 그대로 사용하는 것으로 투명한 부분이 있는 png, tiff 파일의 경우 알파채널 4채널로 불러옴
   
	if (img.empty()) {
		cerr << "Image load failed!" << endl;
		return -1;
	}

	// 세번째 인자를 파일명(확장자포함)으로 해서 img를 저장
	bool chk = imwrite(argv[2], img);
	
	if (chk) {
		cout << argv[1] << " is successfully saved as " << argv[2] << endl;
	} else {
		cout << "File save failed!" << endl;
	}

	return 0;
}

 

 

참고. imwrite 함수 사용 시 세번 째 인수로 vector<int> type의 플래그와 값이 쌍으로 들어있는 파라미터를 전달하면 옵션을 커스터마이징해서 저장 가능

ex. 압축률을 95% 지정하여 저장하는 코드

vector<int> params;
params.push_back(IMWRITE_JPEG_QUALITY);
params.push_back(95);
imwrite("lenna.jpg", img, params);

 

디버그 모드로 빌드 후 프로젝트 폴더 - x64 - Debug 폴더 안에 있는 .exe 파일을 사진파일이 있는 프로젝트 폴더 안으로 꺼내옴

 

 

윈도우 탐색기에서 cmd . 을 치면 해당 경로에서 cmd 창을 열 수 있음

 

실행 화면 lenna.jpg 파일이 생성된 것을 확인할 수 있다.

 

 

 

 

 

7. 템플릿 내보내기

 

OpenCV의 경우 추가 포함 디렉터리, 추가 라이브러리 디렉터리, 추가 종속성 등을 매 프로젝트마다 설정해줘야 하는데, Visual Studio에서 템플릿 기능을 이용하면 프로젝트 속성이나 기본 소스 코드 등이 미리 설정된 프로젝트를 자동으로 생성할 수 있다.

 

5번의 예제코드와 lenna.bmp 파일도 리소스 파일에 추가해 놓고 프로젝트 명도 OpenCVTemplate으로 수정했다.

 

 

프로젝트 - 템플릿 내보내기

 

 

 

Ctrl + Shift + N 을 눌러 새 프로젝트를 생성한다.

 

 

아까 만들어둔 기본 템플릿을 사용하면 프로젝트 속성, 기본 코드, 파일 등이 저장된 상태로 생성할 수 있다.

 

템플릿 내보내기 참고 : https://velog.io/@717lumos