opencv
라이브러리를 linux
환경에서 사용해보고자 한다.
설치 과정부터 사용 예제까지 작성해볼 예정이다.
libgtk2.0-dev
OpenCV의 GUI 모듈 (highgui)을 사용하기 위한 의존성입니다.
pkg-config
라이브러리 경로를 찾는 데 사용됩니다.
libavcodec-dev
libavformat-dev
libswscale-dev
공통
비디오 처리 관련 코덱 의존성입니다.
opencv 설치
// opencv 설치 명령어
sudo apt install -y libopencv-dev python3-opencv
// opencv 설치 확인 명령어
pkg-config --modversion opencv4
cmake_minimum_required(VERSION 3.10.0)
project(opencv_project VERSION 0.1.0 LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17) # C++ 컴파일러가 C++17 표준을 사용하도록 지시한다.
set(CMAKE_CXX_STANDARD_REQUIRED ON) # C++ 17 표준을 사용하도록 지시
find_package(OpenCV REQUIRED COMPONENTS core highgui imgcodecs imgproc) # 시스템에 설치된 OpenCV 라이브러리를 찾는다.
message(STATUS "OpenCV_INCLUDE_DIRS: ${OpenCV_INCLUDE_DIRS}")
message(STATUS "OpenCV_LIBS: ${OpenCV_LIBS}")
add_executable(opencv_project main.cpp)
target_link_libraries(opencv_project ${OpenCV_LIBS})
target_include_directories(opencv_project PUBLIC ${OpenCV_INCLUDE_DIRS})
find_package
시스템의 표준 경로(예: /usr/local
, opt
, Program Files
)나 환경 변수를 뒤져서 OpenCV
설치를 찾는다.
target_link_libraries
생성될 실행파일 opencv_project
가 OpenCV_LIBS
변수에 저장된 OpenCV 라이브러리들과 링크되로록 한다.
여기서 궁금한 점이 어디서 OpenCV_LIBS
라는 변수가 생성되는 점이다.
find_package
명령이 성공적으로 OpenCV
를 찾으면, 표준화된 변수들이 자동으로 설정된다고 한다.
OPenCV
의 경우 일반적으로 다음과 같은 변수들이 설정된다.
OpenCV_FOUND
: OpenCV가 성공적으로 찾아졌는지 여부를 나타내는 불리언 값
OpenCV_INCLUDE_DIRS
: OpenCV의 헤더 파일들이 위치한 경로 목록
OpenCV_LIBS
: 링크해야 할 OpenCV 라이브러리 파일들의 전체 목록
결론적으로 우리가 직접 변수를 정의하는것이 아니라 CMake 내부적으로 OpenCV의 설치 정보를 찾아 자동으로 생성하고 채워주는 변수라고 이해하면 된다.
target_include_directories
opencv_project
실행 파일을 빌드할 때 OpenCV_INCLUDE_DIRS
에 저장된 경로를 포함 디렉토리에 추가하도록 지시하낟. PUBLIC
은 이 포함 경로가 opencv_project
자체뿐만 아니라 opencv_project
를 사용하는 다른 타겟에도 적용됨을 의미한다. 이렇게 해야 컴파일러가 main.cpp
에서 opencv2/opencv.hpp
와 같은 헤더 파일들을 찾을 수 있다.
#include <iostream>
#include <opencv4/opencv2/opencv.hpp>
int main(int, char**){
// 이미지 불러오기
cv::Mat image = cv::imread("dog.jpg");
// 이미지가 제대로 로드되었는지 확인
if (image.empty()) {
printf("Error: Could not open or find the image\n");
return -1;
}
// 이미지를 회색조로 변환
cv::Mat gray_image;
cv::cvtColor(image, gray_image, cv::COLOR_BGR2GRAY);
// 이미지 크기 조절: resize
cv::Mat resized_image, resized_gray_image;
double scale = 0.2; // 원본 크기의 50%로 줄인다.
cv::resize(image, resized_image, cv::Size(), scale, scale, cv::INTER_LINEAR);
cv::resize(gray_image, resized_gray_image, cv::Size(), scale, scale, cv::INTER_LINEAR);
// 원본 이미지를 새 창에 표시
cv::imshow("Original Image", resized_image);
// 회색조 이미지를 또 다른 새 창에 표시
cv::imshow("Grayscale Image", resized_gray_image);
// 키 입력이 있을 때까지 창을 열어 둔다.
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
간단하게 이미지 파일을 읽은 후 회색조로 변경, 사이즈 변경을 했다
컴퓨터 비전에서 그레이 스케일로 변경하는 이유는 다음과 같다고 한다.
make
로 빌드 후 실행하게 되면
이렇게 귀여운 웰시코기가 원본과 흑백으로 변환된 이미지가 새 창에 뜨게되는 것을 볼 수 있다.
OpenCV
에서 제공해 주는 인터페이스를 활용해 아주 간단하게 이미지의 사이즈를 변경하고 조작할 수 있는 것 같다.
라이브러리 설치 및 환경 세팅을 해보았고 간단한 예제를 만들어 보았다.
다음에는 OpenCV
의 여러 기능을 다뤄보겠다.