在 ROS 包中使用自定义 OpenCV 安装
Use custom OpenCV install in ROS package
我正在尝试构建一个 ROS 包,我在其中使用启用了 CUDA 的自定义 OpenCV 3.4 安装。 /usr/local 中的 OpenCV 安装工作正常,我可以使用
从 GPU 文件夹构建和 运行 样本没问题
g++ -o houghlines houghlines.cpp `pkg-config opencv --cflags --libs`
但是,我无法让 catkin 使用我安装的 OpenCV,而不是 ROS 附带的那个。这是我的 CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.3)
project(motion_segmentation_cuda)
set(CMAKE_CUDA_COMPILER /usr/local/cuda-9.1/bin/nvcc)
find_package(catkin_simple REQUIRED)
set(OpenCV_INCLUDE_DIRS
/usr/local/include
/usr/local/include/opencv2
)
set(OpenCV_LIB_DIR
/usr/local/lib
)
set(OpenCV_LIBS
opencv_core
opencv_highgui
opencv_imgcodecs
)
include_directories(${OpenCV_INCLUDE_DIRS})
find_package(CUDA REQUIRED)
catkin_simple()
#Here you can set any gcc/cmake compiler flags, if you so wish
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3")
link_directories(${OpenCV_LIB_DIR})
#Add all of your sources here
cuda_add_executable(
cuda_test_cu
src/main.cpp
src/motion_segmenter.cpp
src/kernel.cu
src/segmenter.cpp
)
#Link the executable to the necessary libs
target_link_libraries(
cuda_test_cu
${catkin_LIBRARIES}
${OpenCV_LIBS}
${CUDA_LIBRARIES}
)
# CMake Indexing
FILE(GLOB_RECURSE LibFiles "include/*")
add_custom_target(headers SOURCES ${LibFiles})
cs_install()
根据各种论坛的建议我也试过了
export CMAKE_PREFIX_PATH="/usr/lib/:$CMAKE_PREFIX_PATH"
export LD_LIBRARY_PATH="/usr/lib/:$LD_LIBRARY_PATH"
以及 CMakeLists 中的无数调整。我的包编译得很好!但最终,我不可避免地得到:
OpenCV Error: No CUDA support (The library is compiled without CUDA support) in throw_no_cuda, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/core/include/opencv2/core/private.cuda.hpp, line 107
一旦我尝试实际使用任何启用 GPU 的 OpenCV 类。
非常感谢!
为了回答你的问题,请绕过我,这个 CMakeLists.txt 有效(出于某种原因):
cmake_minimum_required(VERSION 2.8.3)
project(motion_segmentation_cuda)
find_package(OpenCV 3.4 REQUIRED
COMPONENTS
opencv_core
opencv_highgui
opencv_imgproc
opencv_imgcodecs
PATHS /usr/local
NO_DEFAULT_PATH
CONFIG
)
set(CMAKE_CUDA_COMPILER /usr/local/cuda-9.1/bin/nvcc)
find_package(catkin_simple REQUIRED)
find_package(CUDA REQUIRED)
catkin_simple()
#Here you can set any gcc/cmake compiler flags, if you so wish
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3")
include_directories(include ${OpenCV_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS})
#Add all of your sources here
cuda_add_executable(
cuda_test_cu
src/main.cpp
src/motion_segmenter.cpp
src/kernel.cu
src/segmenter.cpp
)
#Link the executable to the necessary libs
target_link_libraries(
cuda_test_cu
${catkin_LIBRARIES}
${OpenCV_LIBS}
${CUDA_LIBRARIES}
)
# CMake Indexing
FILE(GLOB_RECURSE LibFiles "include/*")
add_custom_target(headers SOURCES ${LibFiles})
cs_install()
最后不用改.bashrc
...
我正在尝试构建一个 ROS 包,我在其中使用启用了 CUDA 的自定义 OpenCV 3.4 安装。 /usr/local 中的 OpenCV 安装工作正常,我可以使用
从 GPU 文件夹构建和 运行 样本没问题g++ -o houghlines houghlines.cpp `pkg-config opencv --cflags --libs`
但是,我无法让 catkin 使用我安装的 OpenCV,而不是 ROS 附带的那个。这是我的 CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.3)
project(motion_segmentation_cuda)
set(CMAKE_CUDA_COMPILER /usr/local/cuda-9.1/bin/nvcc)
find_package(catkin_simple REQUIRED)
set(OpenCV_INCLUDE_DIRS
/usr/local/include
/usr/local/include/opencv2
)
set(OpenCV_LIB_DIR
/usr/local/lib
)
set(OpenCV_LIBS
opencv_core
opencv_highgui
opencv_imgcodecs
)
include_directories(${OpenCV_INCLUDE_DIRS})
find_package(CUDA REQUIRED)
catkin_simple()
#Here you can set any gcc/cmake compiler flags, if you so wish
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3")
link_directories(${OpenCV_LIB_DIR})
#Add all of your sources here
cuda_add_executable(
cuda_test_cu
src/main.cpp
src/motion_segmenter.cpp
src/kernel.cu
src/segmenter.cpp
)
#Link the executable to the necessary libs
target_link_libraries(
cuda_test_cu
${catkin_LIBRARIES}
${OpenCV_LIBS}
${CUDA_LIBRARIES}
)
# CMake Indexing
FILE(GLOB_RECURSE LibFiles "include/*")
add_custom_target(headers SOURCES ${LibFiles})
cs_install()
根据各种论坛的建议我也试过了
export CMAKE_PREFIX_PATH="/usr/lib/:$CMAKE_PREFIX_PATH"
export LD_LIBRARY_PATH="/usr/lib/:$LD_LIBRARY_PATH"
以及 CMakeLists 中的无数调整。我的包编译得很好!但最终,我不可避免地得到:
OpenCV Error: No CUDA support (The library is compiled without CUDA support) in throw_no_cuda, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/core/include/opencv2/core/private.cuda.hpp, line 107
一旦我尝试实际使用任何启用 GPU 的 OpenCV 类。
非常感谢!
为了回答你的问题,请绕过我,这个 CMakeLists.txt 有效(出于某种原因):
cmake_minimum_required(VERSION 2.8.3)
project(motion_segmentation_cuda)
find_package(OpenCV 3.4 REQUIRED
COMPONENTS
opencv_core
opencv_highgui
opencv_imgproc
opencv_imgcodecs
PATHS /usr/local
NO_DEFAULT_PATH
CONFIG
)
set(CMAKE_CUDA_COMPILER /usr/local/cuda-9.1/bin/nvcc)
find_package(catkin_simple REQUIRED)
find_package(CUDA REQUIRED)
catkin_simple()
#Here you can set any gcc/cmake compiler flags, if you so wish
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3")
include_directories(include ${OpenCV_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS})
#Add all of your sources here
cuda_add_executable(
cuda_test_cu
src/main.cpp
src/motion_segmenter.cpp
src/kernel.cu
src/segmenter.cpp
)
#Link the executable to the necessary libs
target_link_libraries(
cuda_test_cu
${catkin_LIBRARIES}
${OpenCV_LIBS}
${CUDA_LIBRARIES}
)
# CMake Indexing
FILE(GLOB_RECURSE LibFiles "include/*")
add_custom_target(headers SOURCES ${LibFiles})
cs_install()
最后不用改.bashrc
...