우분투 18.04에서 C++ + OpenCV 웹캠 예제 돌리기 (CMake 프로젝트 기준)

대상: 우분투 18.04 환경에서 C++로 카메라(웹캠) 테스트를 빨리 해보고 싶은 개발자
환경: Ubuntu 18.04 LTS, CMake 기반 C++ 프로젝트, OpenCV 사용

리눅스 개발 환경 세팅까지 끝났다면,
이제 진짜로 눈에 보이는 걸 하나 만들어보는 게 좋다.

그중에서 제일 간단하면서도 실전에 많이 쓰이는 게 바로 웹캠 + OpenCV 예제다.

이 글에서는:

  • Ubuntu 18.04에서 OpenCV를 설치하고
  • CMake 프로젝트를 만들고
  • 웹캠을 열어서 imshow로 화면을 띄우는 C++ 예제를
  • 처음부터 빌드/실행까지 한 번에* 만들어볼 거야.

1. OpenCV를 어떻게 설치할지 먼저 결정하기

OpenCV는 설치 방법이 여러 가지인데,
처음 시작할 땐 그냥 apt 패키지 버전을 쓰는 게 제일 마음 편하다.

  • 장점: 설치 간단, 바로 사용 가능
  • 단점: 버전이 최신은 아니고, 옵션을 세세하게 고르긴 어려움

우분투 18.04에서 패키지 버전 설치는 이렇게 하면 된다.

sudo apt update
sudo apt install -y libopencv-dev

설치가 끝났다면, OpenCV 관련 헤더/라이브러리가
/usr/include/opencv4 또는 /usr/include/opencv 쪽에 설치된다.

나중에 CUDA, 최적화 옵션, 최신 버전이 필요하면 직접 소스 빌드를 고려하면 되는데,
이 글에서는 “일단 돌려보는 것”에 집중할 거라 패키지 설치만 쓴다.


2. CMake 프로젝트 기본 구조 만들기

홈 디렉토리 아래에 예제 프로젝트 폴더를 하나 만들자.

mkdir -p ~/dev/opencv-webcam-sample
cd ~/dev/opencv-webcam-sample

이 안에 일단 두 개 파일을 만들 거야.

  • main.cpp : 실제 C++ 코드
  • CMakeLists.txt : 빌드 설정

편한 에디터(nano, vim, VSCode 등)로 열어서 작성하면 된다.


3. main.cpp – 웹캠을 열어서 화면 띄우는 최소 예제

main.cpp에 아래 코드를 그대로 넣어주면 된다.

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

int main()
{
    // 0번 카메라 열기 (보통 기본 웹캠)
    cv::VideoCapture cap(0);

    if (!cap.isOpened())
    {
        std::cerr << "[ERROR] Failed to open camera (index 0)" << std::endl;
        return -1;
    }

    std::cout << "[INFO] Camera opened successfully. Press ESC to exit." << std::endl;

    cv::Mat frame;

    while (true)
    {
        // 한 프레임 읽기
        if (!cap.read(frame))
        {
            std::cerr << "[ERROR] Failed to read frame from camera" << std::endl;
            break;
        }

        // 화면에 출력
        cv::imshow("Webcam - OpenCV", frame);

        // 1ms 동안 키 입력 대기
        int key = cv::waitKey(1);
        if (key == 27) // ESC key
        {
            std::cout << "[INFO] ESC pressed. Exiting..." << std::endl;
            break;
        }
    }

    // 자원 정리
    cap.release();
    cv::destroyAllWindows();

    return 0;
}

간단히 코드 구조를 보면:

  • cv::VideoCapture cap(0);
    • 인덱스 0번 카메라(보통 기본 웹캠)를 연다.
  • cap.read(frame);
    • 카메라에서 한 프레임을 읽어 cv::Mat에 저장한다.
  • cv::imshow("Webcam - OpenCV", frame);
    • 창 이름을 "Webcam - OpenCV"로 해서 화면에 보여준다.
  • cv::waitKey(1);
    • 1ms 동안 키 입력을 기다리고, 입력된 키 값을 리턴한다.
    • 여기서는 27(ESC 키)이 들어오면 루프를 빠져나오도록 했다.

4. CMakeLists.txt – OpenCV를 찾고 빌드 설정하기

이제 이 코드를 빌드할 수 있게 CMakeLists.txt를 작성해보자.

cmake_minimum_required(VERSION 3.5)
project(opencv_webcam_sample)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# OpenCV 찾기
find_package(OpenCV REQUIRED)

# 실행 파일 생성
add_executable(opencv_webcam_sample
    main.cpp
)

# OpenCV 라이브러리 링크
target_link_libraries(opencv_webcam_sample
    ${OpenCV_LIBS}
)

중요한 부분은 find_package(OpenCV REQUIRED)
target_link_libraries(... ${OpenCV_LIBS}) 이 두 줄이다.

  • find_package(OpenCV REQUIRED)
    • 시스템에 설치된 OpenCV를 찾아서 헤더/라이브러리 경로, 라이브러리 목록을 CMake에 알려준다.
  • target_link_libraries(... ${OpenCV_LIBS})
    • 방금 찾은 OpenCV 라이브러리를 실행파일에 링크한다.

만약 cmake 단계에서 OpenCV를 못 찾는다면
대부분은 OpenCV가 설치되지 않았거나(apt 설치 누락),
아주 특이한 경로에 설치된 경우라 apt 설치부터 다시 점검해 보는 게 좋다.


5. CMake로 빌드하고 실행하기

이제 빌드를 해보자.
CMake 프로젝트는 보통 빌드 디렉토리를 따로 만들어서 관리한다.

cd ~/dev/opencv-webcam-sample

mkdir -p build
cd build

cmake ..
make -j$(nproc)
  • cmake ..
    • 상위 디렉토리에 있는 CMakeLists.txt를 읽어서 빌드 설정을 생성한다.
  • make -j$(nproc)
    • 가능한 코어를 모두 사용해서 병렬 빌드를 수행한다.

빌드가 성공하면 build 디렉토리 안에
opencv_webcam_sample 실행 파일이 생긴다.

실행은 이렇게:

./opencv_webcam_sample

카메라가 정상적으로 연결되어 있다면:

  • "Webcam - OpenCV" 이름의 창이 하나 뜨고
  • 실시간 웹캠 영상이 보이며
  • 터미널에는 [INFO] Camera opened successfully... 로그가 출력될 거다.

종료는 ESC 키를 누르면 된다.


6. 자주 발생하는 문제와 체크 포인트

처음 돌려보면 이런 문제를 자주 겪는다.

6-1. [ERROR] Failed to open camera (index 0)

가능한 원인은:

  1. 카메라가 연결되지 않았거나, 다른 프로세스에서 이미 사용 중
  2. 노트북이 아니라 데스크탑인데, USB 카메라를 안 꽂았거나 인식이 안 된 경우
  3. Docker/VM 안에서 돌리고 있는데, 디바이스 패스스루가 안 되어 있는 경우

우선 장치가 인식되는지 아래 명령어로 확인해 보자.

ls /dev/video*
  • /dev/video0, /dev/video1 같은게 보이면 일단 시스템에서 카메라를 인식하고 있는 것이다.
  • 여러 개가 보이면 다른 인덱스를 사용해 보는 것도 방법이다.
cv::VideoCapture cap(1); // 1번 카메라 시도

6-2. CMake에서 OpenCV를 못 찾는 경우

cmake .. 할 때 이런 에러가 날 수 있다.

Could NOT find OpenCV (missing: …)

이 경우에는 대부분 패키지 설치가 안 됐거나
우분투 패키지 저장소가 꼬인 경우가 많다.

다시 한 번 설치 명령을 확인해 보자.

sudo apt update
sudo apt install -y libopencv-dev

그래도 안 되면 pkg-config로 OpenCV 패키지를 찾을 수 있는지 보는 것도 방법이다.

pkg-config --modversion opencv

버전 번호가 출력되면 pkg-config 기준으로는 설치가 되어 있는 것.


일단 여기까지 따라왔다면,
우분투 18.04에서 C++ + OpenCV 환경으로 웹캠 테스트를 해볼 수 있는
실전용 최소 예제 하나는 확보한 셈이다.

댓글 남기기