突然发现csdn上的资源不管怎么设置下载都会收费,因此将资源放在最前面:
通过百度网盘分享的文件:帖子所需open-test.jar和.i文件.zip
链接:https://pan.baidu.com/s/1eljLukeryBRctpO3TSzNKw
提取码:rq6n
前言
我看了很多帖子,找了很多攻略,都没能找到在linux上安装opencv的详细攻略,目前有的攻略具体操作时,不是出现这种问题就是出现那种问题。此文是我对安装opencv的步骤和出现问题的一个总结,用于记录这几天的工作,供以后应用时参考。
搭建环境:centos8.5 java8 opencv4.5.1 pythen3.6(虚拟机自带)
1.安装依赖项
sudo yum update
sudo yum groupinstall "Development Tools"
sudo yum install cmake git
sudo yum install libjpeg-devel
sudo yum install libtiff-devel
sudo yum install epel-release
sudo yum install python3-devel
sudo yum install atlas-devel
sudo yum install gcc-gfortran
sudo yum install gtk3-devel
sudo yum install ant #如果不安装就不会编译出libopencv_java451.so文件,必须要有
python3.6 -m pip install numpy --user
如果镜像仓库下载不了,可以删掉cd /etc/yum.repos.d 下的所有文件,重新加载仓库文件:
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
检测虚拟机里面是否装了java8,如果没装需要装一下,具体攻略可以查一下,到处都是。
2.下载OpenCV源码
我将opencv安装在 /opt/ 下,将文件解压到 /opt 下面,所以具体操作如下:
wget https://github.com/opencv/opencv/releases/tag/4.5.1
wget https://github.com/opencv/opencv_contrib/releases/tag/4.5.1
tar -zxvf opencv-4.5.1.tar.gz
tar -zxvf opencv_contirb-4.5.1.tar.gz
下载 .i 文件,并将所有 .i 文件放到/opencv_contrib-4.5.1/modules/xfeatures2d/src 里面,具体文件如下:
将/opencv-4.5.1/modules/features2d/test 的五个文件复制到 /opencv_contrib_4.5.1/modules/xfeatures2d/test下,具体文件如下:
打开/opencv_contrib-4.5.1/modules/xfeatures2d/test/test_features2d.cpp修改信息:
将
#include "features2d/test/test_detectors_regression.impl.hpp"
#include "features2d/test/test_descriptors_regression.impl.hpp"
改为
#include "test_detectors_regression.impl.hpp"
#include "test_descriptors_regression.impl.hpp"
打开/opencv_contrib-4.5.1/modules/xfeatures2d/test/test_rotation_and_scale_invariance.cpp
将
#include "features2d/test/test_detectors_invariance.impl.hpp"
#include "features2d/test/test_descriptors_invariance.impl.hpp"
改为
#include "test_detectors_invariance.impl.hpp"
#include "test_descriptors_invariance.impl.hpp"
3. 创建编译目录并配置CMake
cd /opt/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_C_EXAMPLES=OFF \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=/opt/opencv_contrib-4.5.1/modules \ -D BUILD_EXAMPLES=ON \ -D PYTHON3_EXECUTABLE=/usr/bin/python3.6 \ -D PYTHON3_INCLUDE_DIR=/usr/include/python3.6m \ -D PYTHON3_PACKAGES_PATH=/usr/lib/python3.6/site-packages \ -D BUILD_opencv_python3=ON \ -D WITH_GTK=ON \ -D BUILD_SHARED_LIBS=ON \ -D WITH_JAVA=ON \../opencv-4.5.1
上面的命令格式化后:
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=/opt/opencv_contrib-4.5.1/modules \
-D BUILD_EXAMPLES=ON \
-D PYTHON3_EXECUTABLE=/usr/bin/python3.6 \
-D PYTHON3_INCLUDE_DIR=/usr/include/python3.6m \
-D PYTHON3_PACKAGES_PATH=/usr/lib/python3.6/site-packages \
-D BUILD_opencv_python3=ON \
-D WITH_GTK=ON \
-D BUILD_SHARED_LIBS=ON \
-D WITH_JAVA=ON \
../opencv-4.5.1
PYTHON3_INCLUDE_DIR、PYTHON3_PACKAGES_PATH、PYTHON3_EXECUTABLE 三个路径要确保存在,要确保pythen的版本号与编译命令中的版本号一致。
选项解析:
CMAKE_BUILD_TYPE=RELEASE
:- 设置构建类型为
RELEASE
,这通常会优化代码以提高运行效率,并关闭调试信息。
- 设置构建类型为
CMAKE_INSTALL_PREFIX=/usr/local
:- 指定安装目录为
/usr/local
。这是 Linux 系统上常用的安装位置之一,用于存放手动安装的软件。
- 指定安装目录为
INSTALL_C_EXAMPLES=OFF
和INSTALL_PYTHON_EXAMPLES=ON
:- 控制是否安装 C 和 Python 示例代码。这里关闭了 C 示例的安装,但开启了 Python 示例的安装。
OPENCV_EXTRA_MODULES_PATH=/opt/opencv_contrib-4.5.1/modules
:- 指定 OpenCV 贡献模块的路径。这些模块通常包含额外的算法和功能,不是 OpenCV 核心库的一部分。
BUILD_EXAMPLES=ON
:- 开启示例代码的构建。注意,这与
INSTALL_C_EXAMPLES
和INSTALL_PYTHON_EXAMPLES
不同,它控制是否构建示例代码,而不一定安装它们。
- 开启示例代码的构建。注意,这与
PYTHON3_EXECUTABLE
、PYTHON3_INCLUDE_DIR
和PYTHON3_PACKAGES_PATH
:- 分别指定 Python 3 解释器的路径、Python 头文件的路径和 Python 包的安装路径。这些选项对于构建 OpenCV 的 Python 绑定至关重要。
BUILD_opencv_python3=ON
:- 显式开启 OpenCV Python 3 绑定的构建。在某些情况下,即使指定了 Python 路径,这个选项也是必要的。
WITH_GTK=ON
:- 启用 GTK 支持,这允许 OpenCV 使用 GTK 图形库进行图像显示和其他 GUI 功能。
BUILD_SHARED_LIBS=ON
:- 构建共享库(.so 文件),而不是静态库(.a 文件)。共享库可以被多个程序共享,从而节省磁盘空间和内存。
WITH_JAVA=ON
:- 启用 Java 支持。这允许 OpenCV 与 Java 应用程序交互,但通常需要额外的依赖项,如 JNI(Java Native Interface)库和 JDK。
4.编译和安装
make -j$(nproc) # 使用所有可用的处理器核心来加速编译
sudo make install
sudo ldconfig
5.测试
在 build 中 通过 ./setup_vars.sh 设置环境变量
[root@localhost build]# ./setup_vars.sh
Setting vars for OpenCV 4.5.1
Append PYTHONPATH: /opt/build/python_loader
然后通过:
echo $PYTHONPATH
查看是否添加了环境变量,如果为空,则需手动添加环境变量:
export PYTHONPATH="/opt/build/python_loader $PYTHONPATH"
将两张图片传进/opt/里面:
将测试jar包传进/opt/里面:
在/opt/下编写启动脚本:
vi opencv-test.sh
在脚本里写入启动命令:
#! /bin/bash
java -Djava.library.path=/opt/build/lib -jar ./opencv-test.jar > ./applcation.log 2>&1
要确保再 /opt/build/lib 目录下存在libopencv_java451.so文件,如果不存在则需要把这个目录换成libopencv_java451.so文件所在的目录,并用下面的命令给opencv-test.sh执行权限:
chmod +rwx opencv-test.sh
之后执行opencv-test.sh,通过postman进行测试,测试地址为:虚拟ip:8080/test/opencvtest
opencv-test.jar制定的端口为8080,所以虚拟机需要开启对应端口。查看application.log,如果出现下列信息则说明opencv已正确安装。