[c++] linux opencv 사용하기

wangki·2025년 7월 13일
0

cpp

목록 보기
6/7

개요

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

opencv 사용 예제

CMakeList.txt 세팅

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_projectOpenCV_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;
}

간단하게 이미지 파일을 읽은 후 회색조로 변경, 사이즈 변경을 했다
컴퓨터 비전에서 그레이 스케일로 변경하는 이유는 다음과 같다고 한다.

  1. 이미지 처리 과정이 단순해진다.
  2. 특정 알고리즘의 성능이 향상된다.
  3. 저장 공간을 절약한다

make로 빌드 후 실행하게 되면


이렇게 귀여운 웰시코기가 원본과 흑백으로 변환된 이미지가 새 창에 뜨게되는 것을 볼 수 있다.

결론

OpenCV에서 제공해 주는 인터페이스를 활용해 아주 간단하게 이미지의 사이즈를 변경하고 조작할 수 있는 것 같다.
라이브러리 설치 및 환경 세팅을 해보았고 간단한 예제를 만들어 보았다.
다음에는 OpenCV의 여러 기능을 다뤄보겠다.

0개의 댓글