참 감사한 라이브러리지만 상위 버전을 설치하면 이전 버전의 함수들과 호환이 안 되는 경우를 자주 접하게 된다... 그래서 이럴 때마다 버전을 변경해 줘야 하는데 리눅스에서 설치한 뭔가를 깔끔하게 삭제한다는 게 여간 쉬운 일이 아니다. 해보자..
우선 설치된 opencv 버전을 체크해 주자.
$ pkg-config --modversion opencv4
$ pkg-config --modversion opencv <- opencv 3.x 버전인 경우
$ sudo apt-get purge libopencv* libopencv4.2-java libopencv4.2-jni
$ sudo apt-get autoremove
혹시나 수동으로 찾아서 삭제하는 법
$ dpkg -l | grep libopencv
또 삭제
$ sudo find /usr/local/ -name "*opencv*" -exec rm {} \;
이러면 permission 어쩌고 하면서 삭제 안 되는 놈들의 경로가 나온다.
sudo rm -rf
명령어로 일일이 다 삭제해 주자.
그리고 다시 버전 확인해 보면 안 떠야 제대로 삭제된 거다.
$ pkg-config --modversion opencv4
다 지웠으면 설치하자.
이것저것 설치
$ sudo apt-get install libjpeg-dev libtiff5-dev libpng-dev
$ sudo apt-get install ffmpeg libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev
$ sudo apt-get install libv4l-dev v4l-utils
$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
$ sudo apt-get install libgtk-3-dev <- 이거 넘겨도 됨
$ sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev <- 이거도 넘겨도 됨
$ sudo apt-get install libatlas-base-dev gfortran libeigen3-dev
이제 설치를 하는데, 여기서 버전을 선택할 수 있다.
복사해서 4.2.0
이 숫자를 원하는 버전으로만 바꿔서 설치해 주면 된다.
$ mkdir opencv
$ cd opencv
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.2.0.zip
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.2.0.zip
$ unzip opencv.zip
$ unzip opencv_contrib.zip
파일 받았으니 빌드해야 한다.
밑에 cmake -D
로 시작하는 것들은 컴파일 옵션인데
워낙 종류도 많고 뭐가 뭔지도 잘 모르겠다.
원하는 목적에 따라 찾아보고 ON 해주면 된다.
위에서 opencv_contrib
를 설치했다.
그래서 OPENCV_EXTRA_MODULES_PATH
요기 경로를 잘 명시해 줘야 한다.
opencv_contrib
이건 설치 안 해도 되는데, 라이브러리를 좀 좋은 거 쓰려면 필요하다.
$ cd opencv-4.2.0 <- 위에서 설치한 버전대로 디렉토리 이름이 만들어 짐
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-4.2.0/modules \
-D BUILD_EXAMPLES=ON \
-D WITH_GSTREAMER=ON ..
$ sudo make -j$(nproc) <- 무진장 오래 걸림
$ sudo make install
$ sudo ldconfig
이제 버전을 확인해 보면 원하는 버전으로 잘 설치되었는지 확인할 수 있다.
$ pkg-config --modversion opencv4
나는 ROS랑 opencv를 같이 쓴다.
ROS를 설치하면 opencv 관련해서 자동으로 설치되는 것들이 있다.
그래서 ROS도 같이 삭제했다. 안 해도 될지도...? 연구가 필요.
(위 삭제과정에서 ROS 관련 opencv가 삭제되기 때문에 재설치 반드시 필요)
아래 명령어로 삭제.
$ sudo apt-get purge ros-*
$ sudo apt-get autoremove
ROS를 삭제하고 나면 제대로 설치 안 되는 것들이 있더라.
dependency 어쩌구 하면서 설치가 안 되는데
당황하지 말고 에러 메세지에서 튀어 나오는 것들을 다 설치해 보자.
결국 dependency 최상단에서 문제를 일으킨 놈을 발견할 수 있다.
그 놈을 지우고 다시 설치하면 된다.
msgs 중 설치 자동으로 안 되는 것들이 있음. (ROS 버전에 맞게 설치)
$ sudo apt install ros-noetic-geographic-msgs
$ sudo apt install ros-noetic-vision-msgs
$ sudo apt install ros-noetic-desktop-full
Nvidia Orin NX에서 ROS 설치를 하는데 자꾸 libopencv-dev가 4.5.4로 설치가 되었다.
뭔가 이상해서 보니까 /etc/apt/sources.list
(이게 아닐 수도) 아무튼 /etc/apt
에 가보면 ubuntu의 서버에서 설치 되는 게 아니라 nvidia가 들어가 있는 서버에서 설치되도록 주소가 명시되어 있다.
해당 서버 주소를 주석 처리하고 다시 설치하면 정상적으로 4.2 버전이 설치된다.