问题描述
我需要运行具有不同优化功能的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 (将#修改为@)