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

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 REQUIREDCOMPONENTSopencv_coreopencv_imgprocopencv_imgcodecsCONFIG
)

上面注释的是改正前的,下面是改正后的,改成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.mrgr.cn/news/64910.html

相关文章:

  • 【自动化利器】12个评估大语言模型(LLM)质量的自动化框架
  • 力扣题目解析--最长公共前缀
  • 头歌——数据库系统原理(数据高级查询实验1)
  • Linux中断、软中断、MMU内存映射-深入理解
  • pgsql表分区和表分片设计
  • uniapp
  • 【linux指令】----如何创建一个子进程
  • 智能指针的原理和使用
  • 【论文复现】神经网络的公式推导与代码实现
  • 【react如何在chrome浏览器里面调试?】
  • DAY75WEB 攻防-验证码安全篇接口滥用识别插件复用绕过宏命令填入滑块类
  • 自由学习记录(18)
  • gdal连接pg(java案例)
  • 图神经网络在复杂系统中的应用
  • Python中常见的矩阵乘法操作
  • linux 系统扩容
  • 客户端时间 与 服务器时间
  • Flink本地模式安装详解
  • Linux第二周作业
  • Android13开发IPV4地址固定
  • 操作系统——计算机系统概述——1.4操作系统结构
  • 【数据结构】二叉树——前中后序遍历
  • 聚类算法综述
  • RC高通滤波器Bode图分析(传递函数零极点)
  • 【Jenkins】 上传docker包并推送到远程仓库
  • 基于YOLO11/v10/v8/v5深度学习的危险驾驶行为检测识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】