I can't integrate OpenCV with the Intel Realsense Viewer source code.
Notes: I'm currently on a Windows 10.
I'm using visual studio 2017. msvc 14.12
The opencv version is 3.4.1 (windows pack) that's the version that is pre built for you.
I built and installed the intel realsense sdk from github. This was successful. I also built and successfully install the OpenCV examples using openCV I downloaded .
The problem comes when I try and link OpenCV to the realsense viewer project
The steps I followed to try and link openCV to the Intel Realsense Viewer:
open the intel realsense sdk solution in visual studio (that's the .sln called librealsense2)
go to the realsense-vewier project inside the 'solution explorer' panel inside visual studio
right click on the project 'realsense-viewer' and then select properties
make sure the 2 drop down boxes above have 'x64' and 'all configurations'
Go to the C/C++ -> General option (from the left white box) and then go to 'Additional Include Directories'
Add in the directory %OpenCVDownloadRoot%/build/include and %OpenCVDownloadRoot%/build/include/opencv (this is the configuration of the example OpenCV projects
Now at this point, some functions from openCV weren't being linked properly inside the 'realsense-viewer' project (which is weird because the work in the OpenCV projects in the SDK, even though the properties are the same. The errors were as follows:
So then I followed some extra steps to see if I can get this to work.
Inside the properties dialog box (the one we were just in) instead of selecting C/C++, select 'Linker'
in the 'Additional Libraries Directories' selection, add in %OpenCVDownloadRoot%/build/x64/vc15/lib
inside the 'Linker' properties, search for Input (Linker -> Input)
add in 'opencv_world341d.lib' inside the 'Additional Dependencies' selection.
Now we get a completely different error:
Now the realsense libraries aren't being recognised. No other properties were modified except for the above. I can confirm that step 10 causes all of these errors. Even if I reverse the actions of step 10 after performing all the steps, the above error still remains -> this must be a visual studio bug.
Any help or hints on how I can get OpenCV 3.4.1 + realsense-viewer (from the SDK) working inside visual studio 2017?
EDIT: I have already read: What is an undefined reference/unresolved external symbol error and how do I fix it?
But I have properly linked glfw and all of the other stuff that needs to be linked in order for the error message to go away. I believe the problem may be a bug that intel has, or a bug that vs has which requires a workaround
Solution found after taking a nice walk in the park( assuming you are using windows 10, visual studio 2017 for the project):
go into your local librealsense project folder
go to C:\Users\yourName\to\your\local\realsense\folder\librealsense\tools\CMakeLists.txt
Add this to the end of the file:
find_package(OpenCV REQUIRED)
list(APPEND DEPENDENCIES realsense2 ${OpenCV_LIBS})
so that the entire file is this:
minimum required cmake version: 3.1.0 cmake_minimum_required(VERSION 3.1.0)
project(RealsenseTools)
Save the command line compile commands in the build output set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
View the makefile commands during build
set(CMAKE_VERBOSE_MAKEFILE on)
This parameter is meant for disabling graphical examples when building for
save-to-disk targets. option(BUILD_GRAPHICAL_EXAMPLES "Build graphical examples." ON)
include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) if(COMPILER_SUPPORTS_CXX11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") elseif(COMPILER_SUPPORTS_CXX0X) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") endif()
if(BUILD_GRAPHICAL_EXAMPLES) find_package(OpenGL) if(NOT OPENGL_FOUND) message(FATAL_ERROR "\n\n OpenGL package is missing!\n\n") endif()
set(DEPENDENCIES realsense2 ${OPENGL_LIBRARIES}) if(WIN32) list(APPEND DEPENDENCIES glfw3) else() # Find glfw header find_path(GLFW_INCLUDE_DIR NAMES GLFW/glfw3.h PATHS /usr/X11R6/include /usr/include/X11 /opt/graphics/OpenGL/include /opt/graphics/OpenGL/contrib/libglfw /usr/local/include /usr/include/GL /usr/include ) # Find glfw library find_library(GLFW_LIBRARIES NAMES glfw glfw3 PATHS /usr/lib64 /usr/lib /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE} /usr/local/lib64 /usr/local/lib /usr/local/lib/${CMAKE_LIBRARY_ARCHITECTURE} /usr/X11R6/lib ) if(APPLE) find_library(COCOA_LIBRARY Cocoa) find_library(IOKIT_LIBRARY IOKit) find_library(COREVIDEO_LIBRARY CoreVideo) LIST(APPEND DEPENDENCIES ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY}) endif() list(APPEND DEPENDENCIES m ${GLFW_LIBRARIES} ${LIBUSB1_LIBRARIES}) include_directories(${GLFW_INCLUDE_DIR}) endif() else() set(DEPENDENCIES realsense2) if(NOT WIN32) list(APPEND DEPENDENCIES m ${LIBUSB1_LIBRARIES}) endif() endif()
allow this project to access opencv find_package(OpenCV REQUIRED)
find_package(OpenCV REQUIRED) set(DEPENDENCIES realsense2 ${OpenCV_LIBS})
add_subdirectory(terminal) add_subdirectory(fw-logger) add_subdirectory(enumerate-devices) add_subdirectory(realsense-viewer) add_subdirectory(data-collect) add_subdirectory(depth-quality) add_subdirectory(rosbag-inspector)
Then rebuild the project using cmake gui