대상: 우분투 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)
가능한 원인은:
- 카메라가 연결되지 않았거나, 다른 프로세스에서 이미 사용 중
- 노트북이 아니라 데스크탑인데, USB 카메라를 안 꽂았거나 인식이 안 된 경우
- 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 환경으로 웹캠 테스트를 해볼 수 있는
실전용 최소 예제 하나는 확보한 셈이다.