这里写目录标题
- opencv版本问题
-
- 下载3.2.0源代码
- 进入解压后的目录
- 创建构建目录
- [运行 CMake 配置 配置时指定一个独立的安装目录,例如 /opt/opencv-3.2:](#运行 CMake 配置 配置时指定一个独立的安装目录,例如 /opt/opencv-3.2:)
- 使用多线程编译
-
- [错误1: stdlib.h: 没有那个文件或目录](#错误1: stdlib.h: 没有那个文件或目录)
- [错误2:error: invalid conversion from 'const char*' to 'char*' [-fpermissive]](#错误2:error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive])
- 安装
- [管理多个版本的 OpenCV](#管理多个版本的 OpenCV)
- 在Leg-KILO的CMakeLists.txt文件中修改
opencv版本问题
我的是安装ros自带的4.2.0版本,该系统需要3.2.0。
下载3.2.0源代码
cpp
https://github.com/opencv/opencv/releases/tag/3.2.0
直接用浏览器下载,并解压
进入解压后的目录
bash
cd opencv-3.2.0
创建构建目录
bash
mkdir build && cd build
运行 CMake 配置 配置时指定一个独立的安装目录,例如 /opt/opencv-3.2:
bash
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/opt/opencv-3.2 \
-DBUILD_SHARED_LIBS=ON ..
出错:

解决办法:参考CMake Error at 3rdparty/ippicv/downloader.cmake:77 (message): ICV: Failed to download ICV package:
使用多线程编译
bash
make -j$(nproc)
错误1: stdlib.h: 没有那个文件或目录

解决办法:参考stdlib.h: 没有那个文件或目录
cmake时加上参数-D ENABLE_PRECOMPILED_HEADERS=OFF
错误2:error: invalid conversion from 'const char*' to 'char*' [-fpermissive]

错误信息被顶上面了,可以重定向输出到文件中:
bash
make -j4 > ~/Desktop/make_output.log 2>&1
/home/ubuntu2004/opencv-3.2.0/modules/python/src2/cv2.cpp:730:34: error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
730 | char* str = PyString_AsString(obj);
解决办法:
invalid conversion from 'const char*' to 'char*' [-fpermissive]
在opencv-3.2.0/modules/python/src2/cv2.cpp路径下
找到cv2.cpp,大约在730行,将
char* str = PyString_AsString(obj);
改为
char* str = (char *)PyString_AsString(obj);
安装
bash
sudo make install
管理多个版本的 OpenCV
在 C++ 项目中使用
通过 CMake 的 find_package 指定 OpenCV 版本。例如,使用 OpenCV 3.2:
bash
find_package(OpenCV 3.2 REQUIRED PATHS /opt/opencv-3.2/share/OpenCV)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(your_target ${OpenCV_LIBS})
在Leg-KILO的CMakeLists.txt文件中修改
注释掉之前的,补上opencv 3.2.0安装的路径
bash
# find_package(OpenCV REQUIRED QUIET)
find_package(OpenCV 3.2 REQUIRED PATHS /opt/opencv-3.2/share/OpenCV)