解決PCL和OpenCV中flann庫沖突的問題
做視覺處理,尤其是三維視覺和點云處理等,基本都離不開這倆大庫,以前要么單獨用OpenCV做二維,要么純用PCL做點云后處理。因為準備把學習期間的代碼整合起來,所以需要同時使用兩個庫,結(jié)果發(fā)現(xiàn)flann庫沖突的問題??
查閱了一下網(wǎng)上的方案,基本有幾種方案
- 1.建議改調(diào)用的flann頭文件路徑(要改全部的也太夸張了,要改用到的又不確定用到了哪些??)
- 2.或者用不同的命名空間規(guī)避(根本沒用到flann相關(guān)的函數(shù)就沖突了??)
- 3.修改OpenCV中的flann文件夾名(相對靠譜點??)
方法1:修改OpenCV中的flann文件夾名
如果只打算使用PCL的flann庫,可以通過修改OpenCV庫中的flann文件夾名避免,但是治標不治本, 沒有真正解決問題,只是解決了有問題的庫 ??
執(zhí)行如下兩步,進入路徑,更改名稱,解決!(記得備份或者以后用的時候能想起改回來??)
cd /usr/local/opencv4/include/opencv4/opencv2
sudo mv flann/ flann2/
方法2:通過增加Cmake文件解決問題
索性直接搜索Ubuntu20.04+PCL+OpenCV
環(huán)境的配置經(jīng)驗,還真研究出一些規(guī)律,大部分跑起來而且不提到flann庫沖突問題的博客或者文章都是增加CMakeLists.txt
文件實現(xiàn)的,然后就是昏天黑地的配置和試錯時間??
首先新建文件結(jié)構(gòu)如下(直接把自己的放上來不是為了偷懶 ,如果有好心人可以推薦更精簡或者更方便的文件結(jié)構(gòu)那就太好辣??)文章來源:http://www.zghlxwxcb.cn/news/detail-618968.html
cpp
├── .vscode
│ ├── c_cpp_properties.json
│ ├── launch.json
│ └── tasks.json
├── build
│ └── bin
│ ├── Linx
│ └── data
├── CMakeLists.txt
├── data
├── include
│ ├── func_common.h
│ ├── func_opencv.h
│ └── func_pcl.h
└── src
├── func_common.cpp
├── func_opencv.cpp
├── func_pcl.cpp
└── main.cpp
需要的文件內(nèi)容如下
1. CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(Linx)
# ========================================
# === 構(gòu)建靜態(tài)庫以加速
# ========================================
set(COMMON_SOURCES src/func_common.cpp src/func_pcl.cpp src/func_opencv.cpp)
add_library(Func STATIC ${COMMON_SOURCES})
if(UNIX)
target_link_libraries(Func pthread)
endif()
# ========================================
# === PCL庫
# ========================================
find_package(PCL 1.8 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
# ========================================
# === OpenCV庫
# ========================================
# 記得替換自己的路徑
set(OpenCV_DIR "~/libs/opencv-4.5.3/build/")
find_package(OpenCV REQUIRED)
if (NOT OpenCV_FOUND)
message(FATAL_ERROR "OpenCV library not found")
else()
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(${OpenCV2_INCLUDE_DIRS})
link_directories(${OpenCV_LIB_DIR})
endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build/bin)
aux_source_directory(./src/ DIR_SRCS)
add_executable(Linx ${DIR_SRCS})
set_target_properties(Linx PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
include_directories (${CMAKE_CURRENT_SOURCE_DIR}/include)
target_link_libraries(Linx
${ABSOLUTE_TARGET_LIB} ${PCL_LIBRARIES} libpthread.so ${OpenCV_LIBS} Func ${CLOUD_VIEWER}
)
2. .vscode/c_cpp_properties.json
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/include",
"/usr/include/**",
"/usr/include/x86_64-linux-gnu/sys",
// 檢查pcl路徑
"/usr/include/pcl-1.10",
"/usr/include/eigen3",
"/usr/include/eigen3/Eigen/",
"/usr/include/vtk-7.1",
"/usr/include/qhull",
"/usr/include/flann",
"/usr/include/boost",
// 檢查opencv路徑
"/usr/local/opencv4/include/opencv4"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "${default}",
"cppStandard": "${default}",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
3. .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "g++ - 生成和調(diào)試活動文件",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/bin/Linx",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "為 gdb 啟用整齊打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "Build",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
4. .vscode/tasks.json
{
"version": "2.0.0",
"options": {
"cwd": "${workspaceFolder}/build"
},
"tasks": [
{
"type": "shell",
"label": "cmake",
"command": "cmake",
"args": [
".."
]
},
{
"label": "make",
"group": {
"kind": "build",
"isDefault": true
},
"command": "make",
"args": [
]
},
{
"label": "Build",
"dependsOrder": "sequence", // 按列出的順序執(zhí)行任務(wù)依賴項
"dependsOn":[
"cmake",
"make"
]
}
]
}
配置好以上文件之后,就又可以愉快的寫B(tài)UG啦!(不是 ) ??文章來源地址http://www.zghlxwxcb.cn/news/detail-618968.html
到了這里,關(guān)于解決PCL和OpenCV中flann庫沖突的問題(Ubuntu20.04+VSCode)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!