반응형

suho0515.tistory.com/36

 

[OpenCV] Ubuntu에서 local에 OpenCV를 설치하고 C++에서 사용하는 방법

Ubuntu에서 OpenCV를 설치하는 경우, 보통 시스템 폴더 안 (ex. usr/local/include) 에 설치되게 된다. 만약 다른 버전의 OpenCV를 설치하고자 하는 경우 시스템 폴더 안의 OpenCV를 삭제하고 다시 설치하게 되

suho0515.tistory.com

 

위의 블로그 게시물을 참고하였다.

 

 

ROS 환경에서 다양한 open source package를 사용하다 보면

opencv의 버전이 달라 문제가 발생하는 경우가 생기게 된다.

 

나의 경우 VINS-Mono는 opencv 3.3.1에서 정상적으로 작동하지만

해당 버전을 사용할 경우 realsense의 사용에서 문제가 발생하였다.

 

따라서 각각 다른 opencv를 적용하여 실행시키는 법을 정리한다.

 

우선 작업할 workspace를 생성한다.

 

$ cd ~

$ mkdir catkin_ws_opencv_version

$ cd catkin_ws_opencv_version

$ mkdir src

$ cd src

$ catkin_init_workspace

$ catkin_create_pkg opencv_version_test roscpp

$ cd opencv_version_test

$ cd ~/catkin_ws_opencv_version

$ catkin build

$ source devel/setup.bash

 

 

test용 cpp파일을 생성한다.

해당 c++파일에 적용되는 opencv버전을 확인할 수 있는 프로그램을 작성할 것인데

우선 opencv의 경로를 지정하지 않은, opencv를 사용하지 않는 프로그램을 작성하여 정상 작동을 확인한 후 opencv 경로를 추가해주겠다.

 

$ cd ~/catkin_ws_opencv_version/src/opencv_version_test/src
$ gedit opencv_version_test.cpp
#include <ros/ros.h>
#include <iostream>
//#include "opencv2/opencv.hpp"

int main(int argc, char** argv) {

	ros::init(argc, argv, "opencv_version_test");
	ros::NodeHandle nh;
	//std::cout << "OpenCV version : " << CV_VERSION << std::endl;
 
	return 0;
}

 

이제 CMakeLists.txt 를 수정한다.

cmake_minimum_required(VERSION 2.8.3)
project(opencv_version_test)

## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)

find_package(catkin REQUIRED COMPONENTS roscpp)

catkin_package()

include_directories(${catkin_INCLUDE_DIRS})

add_executable(opencv_version_test src/opencv_version_test.cpp)
target_link_libraries(opencv_version_test ${catkin_LIBRARIES})

 

 

여기까지 완료되었으면 Build를 진행하여 정상적으로 작동하는지 확인한다.

$ cd ~/catkin_ws_opencv_version

$ catkin build

 

 

잘 된다면 이제 opencv를 추가하여 프로그램을 구성하여보자.

 

우선 CMakeLists.txt파일을 아래와 같이 수정해준다.

 

cmake_minimum_required(VERSION 2.8.3)
project(opencv_version_test)

## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)

find_package(catkin REQUIRED COMPONENTS roscpp)
find_package(OpenCV REQUIRED)

catkin_package()

include_directories(${catkin_INCLUDE_DIRS})

add_executable(opencv_version_test src/opencv_version_test.cpp)
target_link_libraries(opencv_version_test ${catkin_LIBRARIES} ${OpenCV_LIBS})

 

 

그리고 opencv_version_test.cpp파일도 수정해준다.

#include <ros/ros.h>
#include <iostream>
#include "opencv2/opencv.hpp"

int main(int argc, char** argv) {

	ros::init(argc, argv, "opencv_version_test");
	ros::NodeHandle nh;
	std::cout << "OpenCV version : " << CV_VERSION << std::endl;
 
	return 0;
}

 

Build 진행

$ ~/catkin_ws_opencv_version

$ catkin build

 

 

잘 작동되는지 확인해보기 위해 아래 내용을 실행해보자.

 

$ roscore

$ rosrun opencv_version_test opencv_version_test

 

 

그럼 기본으로 할당된 경로에서 opencv 를 불러와 버전을 출력하게 된다.

 

 

이제 opencv 경로를 변경하여 다른 버전의 opencv를 사용하여 보자.

cmake_minimum_required(VERSION 3.1)
project(opencv_version_test)

## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

set(OpenCV_DIR /home/eh420/installation/OpenCV-master/lib/cmake/opencv4)

find_package(catkin REQUIRED COMPONENTS roscpp)
find_package(OpenCV REQUIRED)

catkin_package()

include_directories(${catkin_INCLUDE_DIRS})

add_executable(opencv_version_test src/opencv_version_test.cpp)
target_link_libraries(opencv_version_test ${catkin_LIBRARIES} ${OpenCV_LIBS})

 

위의 코드블럭에서 set(OpenCV_DIR /~~~) 을 통해 경로를 지정해주는데 여기는

해당 opencv 버전의 OpenCVConfig-version.cmake ,  OpenCVModules.cmake ,  OpenCVConfig.cmake ,  OpenCVModules-release.cmake 등의 파일이 존재하는 경로를 넣어주자.

 

그리고 다시 빌드

$ ~/catkin_ws_opencv_version

$ catkin build

 

그리고 실행

// terminal_1
$ roscore

// terminal_2
$ rosrun opencv_version_test opencv_version_test

 

 

그럼 다른 버전의 opencv가 적용되어 버전이 바뀐것을 확인할 수 있다.

반응형

+ Recent posts