当前位置: 首页 > article >正文

ubuntu20安装opencv3.2记录

系统环境

ubuntu20安装了ros-noetic,所以系统默认装了opencv4.2.0,但是跑fastlivo推荐的是opencv3.2.0,而且海康相机别人写的ros驱动(海康相机ros驱动)也是需要opencv3.2.0,最终还是选择安装多版本的opencv。

opencv3.2.0安装过程

1、下载安装包

opencv的github链接
下载对应的3.2.0版本

2、安装依赖

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

libjasper-dev安装不了,可以参考问题解决:“E: 无法定位软件包 libjasper-dev,加一个apt源去安装

3、编译

为了管理多版本,一般需要单独创建opencv3.2.0目录,我就直接在/usr/local/opecv3.2.0创建目录,并且最终安装在这里。

cd ~/Downloads/depedence/opencv-3.2.0
mkdir build # 创建build文件夹
cd build # 进入build文件夹
cmake -D CMAKE_BUILD_TYPE=Release 
-D OPENCV_GENERATE_PKGCONFIG=ON 
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.2.0 
-D ENABLE_PRECOMPILED_HEADERS=OFF -D WITH_CUDA=OFF .. 

注意上面设置好安装目录,选择生成pkgconfig文件(方便查看和调用)。最重要的注意WITH_CUDA=OFF,没加这个之前,cmake的过程回报错没法进行后续编译,所以把cuda禁用(一般也用不到)。

make -j8
sudo make install

注意编译的过程中也会有报错,可以参考Ubuntu 20.04 安装opencv3.2.0 及报错解决方法,具体就是:

问题1:/usr/include/c++/9/cstdlib:75:15: fatal error: stdlib.h: 没有那个文件或目录 
 
解决方法:cmake时加上参数-D ENABLE_PRECOMPILED_HEADERS=OFF
 
 
问题2:error: 'CODEC_FLAG_GLOBAL_HEADER' was not declared in this scope 
 
解决方法:在opencv/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp 文件里添加:
#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020
 
问题3:make[2]: *** [modules/python3/CMakeFiles/opencv_python3.dir/build.make:56: modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o] Error 1make[1]: *** [CMakeFiles/Makefile2:21149: modules/python3/CMakeFiles/opencv_python3.dir/all] Error 2
解决方法:找到cv2.cpp,大约在730行,将
char* str = PyString_AsString(obj);
改为
char* str = (char *)PyString_AsString(obj);

漫长等待后就安装完了。

4、配置系统环境

打开系统环境文件

sudo gedit ~/.bashrc 

然后把pkg-config和lib的路径加上

export LD_LIBRARY_PATH=/usr/local/opencv3.2.0/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/opencv3.2.0/lib/pkgconfig:$PKG_CONFIG_PATH

验证opencv版本

pkg-config --modversion opencv

最终的输出是

3.2.0

安装完成,后续就是安装cv_bridge

cv_bridge安装

参考:ROS学习:cv_bridge与opencv版本冲突三种解决方法
简单理解一个cv_bridge版本对应一个opencv,因为一开始ros安装的opencv版本为4.2.0,所以cv_bridge也是关于opencv4.2.0的。那么如果ros还需要用opencv3.2.0并且用cv_bridge那么就需要再编译一个cv_bridge对应opencv3.2.0。下面就是重新编译cv_bridge的过程。

1、下载cv_bridge

下载链接:vision_opencv,记得找到对应ros版本的进行下载,ubuntu20一般找的是noetic。

2、编译

直接把里面的cv_bridge复制到你自己的工作空间中。
然后改cmakelist,把opencv的版本和目录改成自己想要的。

# set(_opencv_version 4)
# find_package(OpenCV 4 QUIET)
# if(NOT OpenCV_FOUND)
#   message(STATUS "Did not find OpenCV 4, trying OpenCV 3")
#   set(_opencv_version 3)
# endif()

set(OpenCV_DIR /usr/local/opencv3.2/share/Opencv)
find_package(OpenCV 3.2.0 REQUIRED
  COMPONENTS
    opencv_core
    opencv_imgproc
    opencv_imgcodecs
  CONFIG
)

上面注释的是改正前的,下面是改正后的,改成opencv3.2.0。然后就是编译。

catkin_make

3、编译海康相机驱动

接着就是把海康相机的驱动MVS_ROS拷贝到工作空间中。
先把工作空间中的cv_bridge包的目录更新到当前终端,查看更新情况

source devel/setup.bash
rospack find cv_bridge

如果输出的是工作空间中的cv_bridge就说明更新成功,接着就是一起编译。整个工作空间的结构是这样的:
在这里插入图片描述

4、启动海康相机驱动

source devel/setup.bash
roslaunch hikrobot_camera hikrobot_camera_rviz.launch 

就能看到相机的话题发布的图像了:
在这里插入图片描述
后续就是调相机参数再跑算法了。

opencv的卸载

ubuntu20安装opencv4和opencv_contrib 多版本共存
openCV安装后的源码尽可能保留,因为可以直接从build文件夹下卸载已经安装的openCV。在ubuntu终端命令行输入以下命令进入安装opencv的build目录并进行卸载操作。

cd build
sudo make uninstall
cd  .. 
sudo rm -r build

最后删除/usr下关于opencv的文件(此步骤不需要?疑问一下)

sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*

像我先前的安装路径为/usr/local/opencv3.2.0, 该行指令可直接变为

sudo rm -r /usr/local/opencv3.2.0

http://www.kler.cn/a/382412.html

相关文章:

  • 查缺补漏----用户上网过程(HTTP,DNS与ARP)
  • leetcode-5-最长回文子串
  • 探索PickleDB:Python中的轻量级数据存储利器
  • 计算机视觉算法真的难学吗?这些技巧让你轻松掌握
  • 导入和部署自定义 LLM 大模型
  • 零基础Java第十三期:继承与多态(一)
  • 洛谷P1090 [NOIP2004 提高组] 合并果子
  • Halcon 从XML中读取配置参数
  • 系统思考—深层结构
  • 《Ooga》进不去游戏解决方法
  • Java基础-组件及事件处理(下)
  • C语言程序的机器表示(逆向+函数调用栈详解版)
  • 情怀系列国际版棋牌完整源码具备强大的多语言扩展功能,涵盖了900多款子游戏,专为全球市场的游戏开发和运营设计。
  • 关于SwitchCase中变量定义及使用变量的一些注意事项参数传递参数时不能实现多态动态绑定的问题c++语法
  • 基于C#实现Windows后台窗口操作与图像处理技术分析
  • 【Linux】从零开始使用多路转接IO --- select
  • 时间段比较与 SQL 实现:交集、并集与补集
  • 盘点10款录音转文字工具,帮你开启高效记录。
  • docker 常用方法
  • qt QColorDialog详解
  • 数组逆序重存放
  • 【无人机设计与控制】改进无人机三维路径规划(蜣螂优化算法)Matlab程序
  • 前端react面试基础知识(II)
  • 【算法】Floyd多源最短路径算法
  • 【Linux】用户权限管理:创建受限用户并配置特定目录访问权限
  • 【react使用AES对称加密的实现】