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 파일을 다운 받는다.
#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
'OpenCV' 카테고리의 다른 글
OpenCV , C++ ] 키보드와 마우스의 이벤트 처리 (0) | 2022.08.16 |
---|---|
OpenCV , C++ ] 도형 그리기 + 문자열 출력 (0) | 2022.08.16 |
OpenCV , C++ ] 카메라와 동영상 파일 다루기 (0) | 2022.08.16 |
OpenCV ] Image Watch 사용하기 (0) | 2022.08.09 |
OpenCV ] 에서 사용하는 주요 클래스들 (C++) (0) | 2022.08.09 |