如何解决如何在OpenCV4.1和cmake中使用OpenCL优化
我需要运行具有不同优化功能的c ++项目:OPENMP,NEON和OpenCL。 我试图在OpenCV上设置所有必要的cmake标志,但OpenCL不起作用。我对此进行了测试:
cv::ocl::setUseOpenCL(true);
if ( ! cv::ocl::haveOpenCL ())
cout << "OpenCL IS NOT available ..." << endl ;
else
cout << "OpenCL IS avaiable ..." << endl ;
我用过:
Raspberry Pi 3B with Raspbian 9 stretch
gcc 6.3.0
cmake 3.7.2
OpenCV 4.1.0
我的cmake标志是:
cmake -D CMAKE_BUILD_TYPE=RELEASE
-D CMAKE_INSTALL_PREFIX=/usr/local
-D BUILD_opencv_java=off
-D BUILD_opencv_python2=OFF
-D BUILD_opencv_python3=OFF
-D ENABLE_PRECOMPILED_HEADERS=OFF
-D ENABLE_FAST_MATH=ON
-D CMAKE_SHARED_LINKER_FLAGS=-latomic
-D ENABLE_NEON=ON
-D ENABLE_VFPV3=ON
-D OPENCV_ENABLE_NONFREE=ON
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules
-D WITH_OPENCL=ON
-D WITH_PTHREADS_PF=OFF
-D EXTRA_C_FLAGS=-mcpu=cortex-a53 -mfpu=neon-vfpv4 -ftree-vectorize -mfloat-abi=hard
-D EXTRA_CXX_FLAGS=-mcpu=cortex-a53 -mfpu=neon-vfpv4 -ftree-vectorize -mfloat-abi=hard
-D BUILD_EXAMPLES=OFF
-D BUILD_PERF_TESTS=OFF
-D WITH_OPENMP=ON ..
CMakeLists.txt:
cmake_minimum_required(VERSION 3.5.1)
set (CMAKE_BUILD_TYPE Release)
SET (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
add_definitions(-std=c++0x)
project(river_flow_velocity_estimation)
set( OpenCV_DIR "/usr/share/OpenCV" )
set(OPENCV_ENABLE_NONFREE "Enable non-free algorithms" ON)
find_package( OpenCV 4.1.0 REQUIRED)
find_package( OpenMP REQUIRED)
find_package( OpenCL 1.2 REQUIRED ) # I tried also with EXACT but it doesn't find it
link_directories(${OpenCL_LIBRARY})
include_directories(include ${OpenCL_INCLUDE_DIRS} ${OpenCV_LIBRARIES} ${OpenCV_INCLUDE_DIRS} } ${catkin_INCLUDE_DIRS})
if (OpenCL_FOUND)
message ("OpenCL FOUND")
endif()
if(OPENMP_FOUND)
message ("OPENMP FOUND")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS} -mcpu=cortex-a53 -mfloat-abi=hard -funsafe-math-optimizations -mfpu=neon-vfpv4")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} -mcpu=cortex-a53 -mfloat-abi=hard -funsafe-math-optimizations -mfpu=neon-vfpv4")
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()
file(GLOB SOURCES "src/*.cpp")
add_executable(river_flow_velocity_estimation ${SOURCES})
target_link_libraries(river_flow_velocity_estimation ${OpenCL_LIBRARY} ${OpenCV_LIBS} ${catkin_LIBRARIES})
我认为问题在于版本,因为我发现OpenCV4.1.0包含OpenCL1.2(实际上我在这里拥有它:/home/pi/opencv/3rdparty/include/opencl/1.2/CL/
),但是当我在其中运行cmake ..
时在项目的构建目录中,cmake将找到OpenCL2.0(在这里:/usr/lib/arm-linux-gnueabihf/libOpenCL.so
)。
我也尝试将/usr/lib/arm-linux-gnueabihf/
文件放在目录libOpenCL.so.1.2
中,但它没有考虑。
有人知道如何在OpenCV4中使用OpenCL吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。