-
OpenCV 개요 및 설치OpenCV/OpenCV_Common 2023. 11. 9. 03:29
OpenCV는 오픈소스로 다양한 언어에서 사용하고 있다.
대표적으로 C/C++, Python, Java등이 있으며 다양한 OS에서도 지원을 하고 있다.
OpenCV는 module이라고 부르는 다수의 라이브러리의 집합이다.
OpenCV모듈은 메인 모듈과 추가 모듈로 나눌 수 있다.
OpenCV 관련 사이트
- OpenCV Homepage
- OpenCV Github
OpenCV의 메인 모듈.
핵심 기능, 널리 사용되는 기능, 기반 기능(infrastructure)등이 포함되어 있다.
- OpenCV_contrib Github
OpenCV의 추가 모듈
최신 기능, 널리 사용되지 않는 기능, 특허, HW 의존적 기능(CUDA)등이 포함되어있다.
- OpenCV Documentation
OpenCV 설치
이번에는 OpenCV를 설치하여 OpenCV의 헤더파일, LIB 파일, DLL파일을 컴퓨터에 생성할 것이다.
- Windows
Windows에는 두 가지 설치 방법을 지원한다.
설치 실행 파일 이용 소스 코드 직접 빌드 장점 - 설치가 빠르고 간단하다.
- 미리 빌드된 DLL, LIB 파일을 제공한다.- 자신의 시스템 환경에 최적화된, DLL, LIB 파일을 생성한다.
- 원하거나 원치 않는 옵션 선택이 가능하다.
(extra modules, parallel_for backend, etc)단점 - OpenCV 추가 모듈 미지원
- Windows 64비트 운영체제만 지원- 빌드 작업이 복잡하고 시간이 오래 걸린다. 이번에는 설치 실행파일을 이용하여 OpenCV를 설치하고자 한다.
윈도우에는 4.5.5 version을 설치하여 사용할 것이다.
다음의 사이트중 한 사이트에서 " opencv-4.5.5-vc14_vc15.exe" 실행파일을 다운받으면 된다.
https://github.com/opencv/opencv/releases
1. opencv-4.5.5-vc14_vc15.exe 실행
실행파일을 실행하여 C:\의 경로에 압축을 해제한다.
C드라이브에 opencv폴더가 생성됨을 확인하고 환경 변수를 설정한다.
2. 환경 변수 등록
- [설정] → [시스템] → [정보] → [고급 시스템 설정] → [환경변수] 로 이동.
- <user-id>에 대한 사용자 변수 새로만들기 선택
- 변수 이름: OPENCV_DIR, 변수 값: C:\opencv\build
- Path 지정
1. Path의 편집 클릭
2. 새로 만들기를 누르고 다음 경로 입력: "%OPENCV_DIR%\x64\vc15\bin"
3. version_check
cmd에 opencv_version을 치면 다음과 같이 버전을 볼 수 있다.
OpenCV 프로그램 개발 환경 설정
이번에는 Windows에 있는 IDE에 개발 환경을 설정해보자.
- Visual studio 2022
1. Visual studio 2022를 실행. [새프로젝트] → [빈 프로젝트] → [프로젝트 이름] 설정
2. (활성) 솔루션 플랫폼이 x64로 설정이 되어 있는지 확인 이후 소스 파일 폴더에 main.cpp파일 추가.
3. OpenCV 헤더 파일 위치를 지정
- Visual Studio 메뉴에서 [프로젝트] → [HelloCV 속성] 선택
- [구성 속성] → [C/C++] → [일반] 선택
- 추가 포함 디렉터리 항목에 "$(OPENCV_DIR)\include" 입력
4. OpenCV LIB 파일 위치 지정
- Visual Studio 메뉴에서 [프로젝트] → [HelloCV 속성] 선택
- [구성 속성] → [링커] → [일반] 선택
- 추가 라이브러리 디렉터리 항목에 "$(OPENCV_DIR)\x64\vc15\lib" 입력
5. OpenCV LIB 파일 이름 지정
- Visual Studio 메뉴에서 [프로젝트] → [HelloCV 속성] 선택
- [구성 속성] → [링커] → [입력] 선택
- 추가 종속성 항목에 opencv_world455d.lib 추가 (Release 모드는 opencv_world455.lib 추가)
- opencv_world455d.lib의 d는 Debug mode라는 뜻이다.
Release mode로 변경 후 3 ~ 5번까지의 설정을 수행.
6. 적용확인
main.cpp에 코드를 적용하여 출력을 확인한다.
#include <iostream> #include "opencv2/opencv.hpp" int main(){ std::cout << "Hello OpenCV " << CV_VERSION << std::endl; return 0; }
결과
정리
Debug 모드 Release 모드 추가 포함 디렉터리 $(OPENCV_DIR)\include 추가 라이브러리 디렉터리 $(OPENCV_DIR)\x64\vc15\lib 추가 종속성 opencv_world455d.lib opencv_world455.lib
- Linux
os: ubuntu 18.04 OpenCV 4.5.5를 바로 설치하면 좋겠지만, 현재 OpenCV 3.2.0이 설치가 되어있다.
$ pkg-config --modversion opencv
이번에는 OpenCV 3.2.0을 리눅스에서 지우고 4.5.5를 설치하고자 한다.
1. OpenCV 3.2.0 삭제
우선 기존의 OpenCV를 지우기 위해서 다음의 명령어로 지울 것이다.
$ sudo apt purge libopencv* python-opencv $ sudo find /usr/local/ -name "*opencv*" -exec rm -i {} \; $ sudo apt autoremove -y
이후 기존 패키지 업데이트 진행
$ sudo apt update -y && sudo apt upgrade -y
제대로 제거가 되었다면 다음과 같이 OpenCV version을 확인할 수 없다.
만약, 기존의 종속 패키지가 없다면 아래의 패키지들을 install 하자.
$ sudo apt install -y build-essential cmake pkg-config git unzip $ sudo apt install -y libjpeg-dev libtiff5-dev libpng-dev libtiff-dev $ sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev libwscale-dev libxvidcore-dev libx264-dev libxine2-dev $ sudo apt install -y libv4l-dev v4l-utils $ sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev $ sudo apt install -y libgtk2.0-dev libgtk-3-dev $ sudo apt install -y mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev $ sudo apt install -y libatlas-base-dev gfortran libeigen3-dev $ sudo apt install -y python2.7-dev python3-dev python-numpy python3-numpy
https://github.com/opencv/opencv/releases
이제 OpenCV를 빌드하기 위해 home폴더에 opencv dir을 만들고 Github에서 해당 버전의 zip 파일을 받아올 것이다.
$ mkdir opencv_build && cd opencv_build $ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.5.zip $ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.5.zip $ unzip opencv.zip $ unzip opencv_contrib.zip
opencv main module과 opencv contrib module을 압축해제 한다.
이제 opencv폴더 내부로 들어가서 build dir을 생성한다.
$ cd opencv-4.5.5 $ mkdir build && cd build
cmake를 하기 위해 다음의 내용을 terminal에 입력하면 된다.
그러나 경로를 확인하고 입력해야 제대로 cmake가 진행된다.
python의 경우 import sys를 사용하여 각각의 경로를 알 수 있다.
import sys import sysconfig print(sys.prefix) # -D CMAKE_INSTALL_PREFIX=(경로 입력) print(sys.executable) # -D PYTHON_EXECUTABLE=(경로 입력) print(sysconfig.get_config_var('LIBDEST')) #-D PYTHON3_PACKAGES_PATH=(경로 입력)
cmake 진행. 전부 할 필요는 없이 필요한 부분만 진행하면 된다.
주의사항(CUDA && CUDNN) 사용시
- CUDA_TOOLKIT_ROOT_DIR : 본인의 CUDA 버전과 일치하는지 확인하자.
- OPENCV_EXTRA_MODULES_PATH : 위에서 생성한 opencv 폴더 내 contrib 폴더 경로와
일치하는지 확인하자. - CUDA_ARCH_BIN CUDA_ARCH_PTX : 본인의 GPU 모델 사양에 맞추자. (아래의 링크에서 검색 가능)
- CUDNN* : 본인이 설치한 cuDNN 버전을 확인한 후 맞춰서 변경해주자.
빌드가 되지 않는다면, 경로를 꼭꼭!! 확인하자!!! 진짜 중요함!!
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_GENERATE_PKGCONFIG=ON \ -D OPENCV_ENABLE_NONFREE=OFF \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib-4.5.5/modules \ -D INSTALL_C_EXAMPLES=ON \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D BUILD_EXAMPLES=ON \ -D BUILD_DOCS=OFF \ -D BUILD_SHARED_LIBS=ON \ -D BUILD_opencv_python2=OFF \ -D BUILD_opencv_python3=OFF \ -D BUILD_NEW_PYTHON_SUPPORT=ON \ -D WITH_CUDA=ON \ -D WITH_CUBLAS=ON \ -D WITH_CUDNN=ON \ -D CUDA_FAST_MATH=1 \ -D OPENCV_DNN_CUDA=ON \ -D CUDA_ARCH_BIN=5.2 \ -D CUDA_ARCH_PTX=5.2 \ -D WITH_VTK=ON \ -D WITH_OPENCL=ON \ -D OPENCV_SKIP_PYTHON_LOADER=ON \ -D PYTHON_EXECUTABLE=~/anaconda3/envs/yolov4/bin/python3.7 \ -D PYTHON3_INCLUDE_DIR=~/anaconda3/envs/yolov4/include/python3.7m \ -D PYTHON3_NUMPY_INCLUDE_DIRS=~/anaconda3/envs/yolov4/lib/python3.7/site-packages/numpy/core/include \ -D PYTHON3_PACKAGES_PATH=~/anaconda3/envs/yolov4/lib/python3.7 \ -D PYTHON3_LIBRARY=~/anaconda3/envs/yolov4/lib/libpython3.7m.so \ -D PYTHON_LIBRARIES=~/anaconda3/envs/yolov4/lib/python3.7 ../
make를 진행하기 위해서 cpu 코어수를 확인하자. (그냥 make를 진행해도 상관은 없음)
필자는 8코어 이므로 무리가 가지 않도록 1개의 코어를 제외하고 make를 진행하였다.
$ cat /proc/cpuinfo | grep processor | wc -l $ make -j7
빌드가 완료되면 sudo make install을 하고 version을 확인해보자.
opencv4가 정상 설치되었다면, 기존의 버전 체크 명령어에 숫자 4를 추가해주면 된다.
$ sudo make install $ pkg-config --modversion opencv4
'OpenCV > OpenCV_Common' 카테고리의 다른 글
영상 데이터 구조 및 표현 (2) 2023.11.06 컴퓨터 비전 개요 (0) 2023.11.06