[OpenCV] C++์ OpenCV 4.x๋ก ๊ฐ๋ฐํ ์ ์๋ ํ๊ฒฝ ๋ง๋ค๊ธฐ
๊ฐ๋ง์ OpenCV ๊ธ์ ์์ฑํ๊ฒ ๋์์ต๋๋ค. ์ ๋ช๋ ๋ฐฑ์๋ ์์ง๋์ด๋ง ๊ณต๋ถ๋ฅผ ํ๊ฒ ๋๋ฉด์ ์ฅ๋๊ฐ์ฒ๋ผ ์ฌ๊ฒจ์ค๋ OpenCV ๊ธ์ ๋ค์ ์ฐ๊ฒ ๋์๋๋ฐ์. ์ ๋ณธ ์ฌ์ด์ ๋ฒ์จ OpenCV 4.6 Pre-release๋ก OpenCV 5.x ๋ฒ์ ๊น์ง ์ฌ๋ผ์จ ๊ฒ์ ๋ณด๊ณ ์ ๋ง ์๊ฐ์ด ๋นจ๋ฆฌ ํ๋ฌ๊ฐ๊ณ ์๋ค๋ ๊ฒ์ ์์ผ ๋๊ผ์ต๋๋ค.
๋ง๋ค ํ๊ฒฝ
์ค๋์ ์๋์ 3๊ฐ์ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํด์ OpenCV ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ง๋ค์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
- JetBrains CLion / CMake
- OpenCV 4.6
- Ubuntu Linux 20.04
์ฌ์ค OpenCV๋ฅผ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ์ C++ ์ธ์๋ Python์ด ์๋๋ฐ์. ๋ฅ๋ฌ๋์ด๋ ๋จธ์ ๋ฌ๋์ ์ฃผ๋ก ํ์๋ ๋ถ๋ค์ Python์ ์ด์ฉํ ๊ฒ์ด๊ณ , ๊ทธ ์ธ IoT๋ ์นด๋ฉ๋ผ ๋ฑ ํ๋์จ์ด๋ฅผ ์ฃผ๋ก ๋ค๋ฃจ์๋ ๋ถ๋ค์ C++๋ฅผ ์ธ ๊ฒ์ ๋๋ค. Python๊ณผ ๋ฌ๋ฆฌ ์ค์น๊ฐ ๋น๊ต์ ์ฝ์ง ์์ C++ ํ๊ฒฝ์ ๋ง๋ค์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Install build tools and libraries
์ฐ๋ฆฌ๋ ์ฌ๊ธฐ์ OpenCV์ ์์ค๋ฅผ ์ง์ ๋ค์ด๋ก๋ ๋ฐ์ ์ค์นํ ๊ฒ์ด๋ฏ๋ก ์ด ์์ค๋ฅผ ๋น๋ํ ๋๊ตฌ๋ค์ด ํ์ํฉ๋๋ค.
$ sudo apt install build-essential pkg-config cmake
- build-essential: C/C++ ์ปดํ์ผ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(make ํฌํจ)
- pkg-config: ํ๋ก๊ทธ๋จ ์ปดํ์ผ ๋ฐ ๋งํฌํ ๋ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฉํ ์ ๋ณด(.pc ํ์ผ)๋ฅผ ์ฝ๋ ๋ชจ๋
- cmake: CMakeList๋ฅผ Makefile๋ก ๋ณํํด์ฃผ๋ ๋๊ตฌ
์ด 3๊ฐ์ง๋ฅผ ์ ๋ถ ๋ฐ์๋ค๋ฉด ๋ค์์ OpenCV ๋น๋๋ฅผ ์ํด ์ฌ์ฉํ๋ ์ด๋ฏธ์ง ๋ฐ ๋น๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
$ sudo apt install libjpeg-dev libtiff5-dev libpng-dev
JPEG, TIFF, PNG ๋ฑ OpenCV์์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ถ๋ฌ์ค๊ฑฐ๋ ์ฒ๋ฆฌํ ์ด๋ฏธ์ง๋ฅผ JPEG, TIFF, PNG ํ์ผ๋ก ์ ์ฅํ๊ฑฐ๋, ๋ฐ๋๋ก ์ด ํ์ผ๋ค์ ์ฝ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋๋ค.
$ sudo apt install ffmpeg libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev
ffMPEG, avi Codec, XVID core, x264 mp4 ๋ฑ ๋น๋์ค ์์ ์ฝ๋ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค. ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํน์ ์์์ ๋ง๋ค๊ณ , ์ ์ฅํ๊ฑฐ๋ ํน์ ํน์ ์์ ํ์ผ์ OpenCV์์ ๋ถ๋ฌ์ฌ ์ ์๋๋ก ๋์์ค๋๋ค.
$ sudo apt install libv4l-dev v4l-utils
v4l(Video4Linux) ํจํค์ง๋ Linux์์ ์นด๋ฉ๋ผ ์์์ ๊ฐ์ ธ์ค๊ธฐ ์ํ ๋๋ผ์ด๋ฒ API์ ๋๋ค.
$ sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
๋น๋์ค ์คํธ๋ฆฌ๋ฐ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด OpenCV๋ก ์คํธ๋ฆฌ๋ฐ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ ์ ์๋๋ก ๋์์ฃผ๋ ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
$ sudo apt install libgtk-3-dev
OpenCV์์๋ ์ง์ ์ด๋ฏธ์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๊ณ ์ด๋ฅผ Window์ ๋ถ๋ฌ์ ๊ฐ๋ฐ์๊ฐ ๋๋ฒ๊น ํด์ฃผ๋๋ก ์ ๊ณตํ๋๋ฐ์. ์ด ๋ ์ฌ์ฉํ๋ highgui ๋ชจ๋์ ํฌ๋ก์ค ํ๋ซํผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ QT์ ๋ฆฌ๋ ์ค์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ GTK๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ ์ค์์ GTK+๋ฅผ ์ฌ์ฉํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
$ sudo apt install libatlas-base-dev gfortran libeigen3-dev
- libatlas-base-dev: C, Fortran ๊ธฐ๋ฐ ํ๋ ฌ ์ฐ์ฐ ์ต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- gfortran: ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ ์ํ ํฌํธ๋
- libeigen3-dev: Mozilla๊ฐ ๊ฐ๋ฐํ OpenCV์ ๋ด์ฅ๋ Matrix, Vector, Scalar ์๋ฃ๊ตฌ์กฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Clone OpenCV
ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น๊ฐ ๋๋ฌ์ผ๋ฉด ์ด์ OpenCV ์์ค๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
$ git clone https://github.com/opencv/opencv.git --depth=20
์ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด opencv ์์ค๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ต๋๋ค.
$ git clone https://github.com/opencv/opencv_contrib.git --depth=20
๋ง์ฝ, OpenCV Extra ๋ชจ๋๋ ๊ฐ์ด ํ์ํ๋ค๋ฉด ์ ๋ช ๋ น์ด๋ ๊ฐ์ด ์คํํด์ค์ผ ํฉ๋๋ค.
$ mkdir build && cd build
CMake๋ฅผ ์ด์ฉํด ๋น๋ ํ์ผ์ ์์ฑํ๊ธฐ ์ , build ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
$ cmake .. -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=OFF -D WITH_TPP=OFF -D WITH_1394=OFF -D BUILD_WITH_DEBUG_INFO=OFF -D BUILD_DOCS=OFF -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=OFF -D BUILD_PACKAGES=OFF -D BUILD_TESTS=OFF -D BUILD_PREF_TESTS=OFF -D WITH_QT=OFF -D WITH_GTK=ON -D WITH_OPENGL=ON -D BUILD_opencv_python3=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -D WITH_V4L=ON -D WITH_FFMPEG=ON -D WITH_XINE=ON -D OPENCV_ENABLE_NONFREE=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D OPENCV_SKIP_PYTHON_LEADER=ON -D OPENCV_GENERATE_PKGCONFIG=ON
๋ง์ฝ Extra ๋ชจ๋์ด ํ์ํ์ง ์๋ค๋ฉด OPENCV_EXTRA_MODULES_PATH๋ ์ ์ง ์์๋ ๋ฉ๋๋ค.
์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์๋ค๋ฉด Build files have been written to: ๋ผ๋ ๊ฒ์ด ๋์ฌ ๊ฒ์ ๋๋ค.
Compile and Install OpenCV
์ด์ ๋น๋ ํ๊ฒฝ์ด ๋ง๋ค์ด์ก์ผ๋ ๋ณธ๊ฒฉ์ ์ผ๋ก ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผ ํด๋ณด๊ฒ ์ต๋๋ค.
$ make -j $(nproc)
์ฌ๊ธฐ์ nproc๋, ์ฌ๋ฌ๋ถ๋ค ์ปดํจํฐ์ ์ฝ์ด ๊ฐฏ์์ธ๋ฐ์. ์ต๋ ์ฝ์ด ๊ฐฏ์๋ฅผ ์ถ๋ ฅํ๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ์ ๋ชจ๋ ์ฝ์ด๋ฅผ ๋ค ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ปดํ์ผ ์ค ์ผ๋ถ ์์ ์ ํด์ผํ๋ค๋ฉด ์์ ์ ์ฝ์ด ์ค ์ผ๋ถ๋ง ์ฌ์ฉํ์๊ณ , ์ปดํ์ผ ์ค์ ์๋ฌด๊ฒ๋ ํ์ง ์์ผ์ค ๊ฒ์ด๋ผ๋ฉด ์ ๋ช ๋ น์ด๋ฅผ ์ ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
์ ๋ 16์ฝ์ด ์ค 8์ฝ์ด๋ง์ ์ฌ์ฉํ์ต๋๋ค. ์ค๋ฅธ์ชฝ ์์ ํ๋์ ๋ถ๋ถ์ด CPU ์ฌ์ฉ๋ฅ ๋ถ๋ถ์ธ๋ฐ, ์ ํํ ๋ฐ ์ ๋๋ง ์ฐจ์งํ๊ณ ์์ต๋๋ค. ์ฝ์ด ์ฌ์ฉ๋์ ๋ฐ๋ผ ์ปดํ์ผ ์๋๊ฐ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ๋ถ PC์ ๋ง์ถฐ ์ปดํ์ผ์ ์ฌ์ฉํ ์ฝ์ด ์๋ฅผ ์กฐ์ ํ์๋ฉด ๋ฉ๋๋ค.
$ sudo make install
์ปดํ์ผ์ด ๋ชจ๋ ์๋ฃ๋์์ผ๋ฉด, ์ด์ ๋น๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น๋ฅผ ์งํํฉ๋๋ค.
Create Project
๋ชจ๋ OpenCV ์ค์น๊ฐ ๋๋ฌ์ต๋๋ค. ์ด์ CLion์ ์ด์ด์ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ , OpenCV ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ ์ฉํ๋์ง์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
opencvExample์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ฑฐ๋ ์ํ๋ ์ด๋ฆ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๋ง๋ญ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์์ ๊ฐ์ด include ํ ๋๋ ํฐ๋ฆฌ์ OpenCV๋ฅผ ๋ฃ๊ณ , link๋ OpenCV LIBS๋ฅผ ๋ฃ์ด์ค๋๋ค.
Example
๊ฐ๋จํ๊ฒ ๋ช ๋ น์ด์ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅํ๋ฉด ์ด๋ฏธ์ง๊ฐ ๋ก๋ฉ๋๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ ์ฝ๋๋ฅผ ๋ง๋ค๊ณ Clion์์ ์คํํ๋ฉด Usage Command๊ฐ ๋ํ๋ฉ๋๋ค. ์ํ ์คํ์ ์ํด [Run] - [Run/Debug Configurations]๋ก ๋ค์ด๊ฐ๋๋ค.
์ฌ๊ธฐ์ Program arguments ๋ผ๋ ๊ณณ์ด ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ฌ๋ฌ๋ถ๋ค์ด ์ฝ์ ์ด๋ฏธ์ง์ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ผ CLion์์๋ ํฐ๋ฏธ๋์ ๋ช ๋ น์ด๋ฅผ ์น์ง ์๊ณ ๋ฐ๋ก๋ฐ๋ก ์ด๋ฏธ์ง๊ฐ ๋ถ๋ฌ์์ง๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋ง์น๋ฉฐ...
์์ฃผ ๊ฐ๋จํ ์์ ๋ก OpenCV๋ฅผ ์ค์นํ๊ณ CLion์์ ๊ฐ๋ฐํ ์ ์๋ ํ๊ฒฝ์ ๋ง๋ค์ด๋ดค์ต๋๋ค. ์ด์ ์ ๋นํ๋ฉด NVIDIA GPU ๋ ์ ๋๋ผ์ด๋ฒ ์ค์น๊ฐ ๊ฐ๋จํด์ง๋ฉด์ CUDA ์ค์น ๋น์ฉ์ด ๊ฐ์๋๋ ๋ฑ์ ๋ณํ๊ฐ ์์๋๋ฐ์.
ํ์ง๋ง CMake์ ๋ํด ์ ๋ชจ๋ฅด์ ๋ค๋ฉด ์ด ๊ธ์ ์ฝ์ด ์ด๋ ค์ธ ์ ์์ต๋๋ค. CMake์ ๋ํด ์ข ๋ ๊ณต๋ถํด๋ณด๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ธ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
2017.03.04 - [Programming/C++] - CMake๋ฅผ ์ด์ฉํ C/C++ ํ๋ก์ ํธ ๋น๋
๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ถ๋ถ์ C, C++ ๊ธฐ๋ฐ ๋ชจ๋๋ค์ CMake๋ฅผ ํตํด ๋น๋/์ปดํ์ผ ํ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ์ดํดํ๊ณ OpenCV๋ฅผ ์ค์นํด๋ณด๋ฉด์ ๋ ๋์๊ฐ์๋ ๋ฆฌ๋ ์ค ์ปค๋์ ๋น๋ํ๋ ๋ฑ์ ๊ณต๋ถ๋ฅผ ํด๋ณด์๋ฉด ๋์ฑ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
'Programming > OpenCV' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[OpenCV] ์ํ๋ ์ด๋ฏธ์ง ์์ญ(๊ด์ฌ์์ญ, ROI) ์๋ฅด๊ธฐ(Crop) (0) | 2022.07.02 |
---|---|
[GP] OpenCV Trackbar ์ฃผ๋ฌด๋ฅด๊ธฐ (0) | 2017.03.01 |
OpenCV์์ KeyEvent๋ฅผ ์ฌ์ฉํด๋ณด์. (0) | 2017.01.21 |
OpenCV์์ Mouse Event๋ฅผ ์ฌ์ฉํด๋ณด์ (0) | 2016.12.18 |
OpenCV์ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋ฐฉ๋ฒ๊ณผ Mat ํด๋์ค (0) | 2016.11.20 |