首先是Eigen库文件
Eigen只包含头文件,因此它不需要实现编译,只需要你include到你的项目,指定好Eigen的头文件路径,编译项目即可。而且跨平台,当然这是必须的。
我们为了替换版本,不用命令安装
下载Eigen库
https://github.com/eigenteam/eigen-git-mirror/releases?after=before-evaluators
这里选择3.1.3
因为OrbSlam2要求最低3.1以上版本,不选太新是害怕不兼容
解压后,改名
打开看下里面:
这里面有两个东西有用
Eigen和unsupported
我们把文件夹整体拷贝到 /usr/include
命令:
sudo cp -r ynh_eigen3 /usr/include
打开/usr/include看看
友情提示:改名命令,sudo mv ynh_eigen3 ynh_eigen3.1.3 mv后面是旧名字,最后是新名字
打开工程,导入头文件进行测试:
#include <iostream>
#include <ynh_eigen3.1.3/Eigen/Dense>
using Eigen::MatrixXd;
using namespace Eigen;
using namespace std;
int main()
{
std::cout << "Hello, World!" << std::endl;
MatrixXd m(2,2);
m(0,0) = 3;
m(1,0) = 2.5;
m(0,1) = -1;
m(1,1) = m(1,0) + m(0,1);
std::cout << m << std::endl;
MatrixXd M1 = MatrixXd::Random(3,3);
M1 = (M1 + MatrixXd::Constant(3,3,1.2)) * 50;
cout << "M1 =" << endl << M1 << endl;
VectorXd V1(3);
V1 << 1, 2, 3;
cout << "V1 =" << endl << V1 << endl;
cout << "M1 * V1 =" << endl << M1 * V1 << endl;
}
但是实际项目中,和别人对接,用自己名字太中二,
大家一般都是
#include <Eigen/Dense>
所以,下次我们复制的时候,不要整体,就把原文件下的Eigen放在 /usr/include
有些人会有unsupported模块的需求,所以直接也把,unsupported放入到Eigen,一起拷贝到 /usr/include
然后配置opencv3.2.0
安装opencv依赖项
关于依赖项的每一个解释
请看博客:
https://www.cnblogs.com/feifanrensheng/p/8619539.html
步骤# 1:安装opencv的依赖项
本教程中的大部分(实际上全部)步骤将通过使用您的终端来完成。 首先,打开命令行并更新apt-get软件包管理器以刷新和升级以及预先安装的软件包/库:
1 sudo apt-get update
2 sudo apt-get upgrade
接下来,让我们安装一些开发者工具:
1 sudo apt-get install build-essential cmake pkg-config
pkg-config软件包(非常有可能)已经安装在你的系统上,但为了以防万一,一定要将它包含在上面的apt-get命令中。 cmake程序用于自动配置我们的OpenCV版本。
OpenCV是一个图像处理和计算机视觉库。 因此,OpenCV需要能够从磁盘加载各种图像文件格式,例如JPEG,PNG,TIFF等。为了从磁盘加载这些图像,OpenCV实际上调用了其他图像I / O库,它们实际上有助于加载和解码 处理。 我们在下面安装必要的:
1 sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
好的,现在我们有图书馆从磁盘加载图像 - 但视频呢? 使用以下命令来安装用于处理视频流和从相机访问帧的软件包:
1 sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
2 sudo apt-get install libxvidcore-dev libx264-dev
OpenCV通过一套非常有限的GUI工具提供开箱即用的功能。 这些GUI工具允许我们在屏幕上显示图像(cv2.imshow),等待/记录按键(cv2.waitKey),跟踪鼠标事件(cv2.setMouseCallback)以及创建简单的GUI元素,如滑块和轨迹条。 同样,你不应该期望用OpenCV构建完整的GUI应用程序 - 这些只是简单的工具,可以让你调试代码并构建非常简单的应用程序。
在内部,处理OpenCV GUI操作的模块的名称是highgui。 highgui模块依赖于GTK库,您应该使用以下命令安装它:
1 sudo apt-get install libgtk-3-dev
接下来,我们安装用于优化OpenCV内部各种功能的库,例如矩阵操作:
1 sudo apt-get install libatlas-base-dev gfortran
我们将通过为Python 2.7和Python 3.5安装Python开发头文件和库(这两种方式)来完成第1步:
1 sudo apt-get install python2.7-dev python3.5-dev
注意:如果你没有安装Python开发头文件和静态库,你将在步骤4中遇到问题,我们运行cmake来配置我们的版本。 如果没有安装这些头文件,那么cmake命令将无法自动确定Python解释器和Python库的正确值。 简而言之,本节的输出将显示为“空白”,您将无法构建Python绑定。 当你到达第4步时,花时间比较你的命令输出到我的。
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
下载opencv,GitHub搜索opencv就行,选择3.2.0版本源代码
下载后,解压源代码,在里面新建build,然后使用cmake-gui进行编译
卡在下载地方,解决的办法是手动下载
地址:
下载好后,替换
/home/apple/ynh_compline/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e目录下的同名文件,名字大家可能都不一样
反正是opencv-3.2.0/3rdparty/ippicv/downloads/linux-*目录下的同名文件,重新cmake
成功
接着进行选择,把install目录放在当前文件夹下,到时候方便我们移动到指定位置
有几个选项比较重要:
要么是Release 要么是Debug
放在我们想放入的地方
opencv3版本的额外库,这里我们用不到,不用编译
cmake这边完事后
打开build
输入
make
make install
如果上面的命令出错了就
输入:
make uninstall
然后
sudo make install
注意:ubuntu删除文件夹命令:sudo rm -r share
这里我们假设自己有很多个opencv,进行配置
打开Path环境变量
把当前的加入进去:
gedit ~/.bashrc
export PKG_CONFIG_PATH=/home/apple/ynh_compline/opencv-3.2.0/ynh_install/lib/pkgconfig
export LD_LIBRARY_PATH=/home/apple/ynh_compline/opencv-3.2.0/ynh_install/lib
更新~/.bashrc
source ~/.bashrc
查询OpenCV版本
pkg-config --modversion opencv
使用opencv的时候,在工程下,添加opencv的cmakelist
指定哪个opencv,然后发现opencv,然后添加opencv头文件,然后链接opencv库目录
#include <iostream>
#include <Eigen/Dense>
using Eigen::MatrixXd;
using namespace Eigen;
using namespace std;
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/features2d/features2d.hpp>
using namespace cv;
int main()
{
std::cout << "Hello, World!" << std::endl;
MatrixXd m(2,2);
m(0,0) = 3;
m(1,0) = 2.5;
m(0,1) = -1;
m(1,1) = m(1,0) + m(0,1);
std::cout << m << std::endl;
MatrixXd M1 = MatrixXd::Random(3,3);
M1 = (M1 + MatrixXd::Constant(3,3,1.2)) * 50;
cout << "M1 =" << endl << M1 << endl;
VectorXd V1(3);
V1 << 1, 2, 3;
cout << "V1 =" << endl << V1 << endl;
cout << "M1 * V1 =" << endl << M1 * V1 << endl;
Mat img = imread("/home/apple/CLionProjects/Demo2/img1.jpg");
if(img.empty())
{
return 0;
}
cvNamedWindow("游戏原画");
imshow("游戏原画", img);
Ptr<ORB> orb = ORB::create(100000);
vector<KeyPoint> Keypoints1;
Mat descriptors1;
orb->detectAndCompute(img, Mat(), Keypoints1, descriptors1);
Mat ShowKeypoints1;
drawKeypoints(img,Keypoints1,ShowKeypoints1);
imshow("Keypoints1", ShowKeypoints1);
waitKey();
return 0;
}
因为本人是Debug模式编译的opencv,所以这一块,可以进入opencv源代码查看源码
ORB源代码
具体进入方式很简单,只要你编译opencv的时候是Debug模式
打个断点:
clion选择debug模式启动
这一块的按钮和VS非常相似,我直接选择
step into
就可以进入到源代码中,结合step out 能快速进入算法核心,
因为你要是一步一布进入,它的初始化,Mat的初始化,这些小步也会走
不说这么多了,动手的时候你就知道了
这里还有一个问题,就是opencv输入代码的时候没有提示,因为我们没用把opencv放入到/usr/之类的全局文件夹
我们这么做有好处,也有坏处-没有提示
当然我们把opencv的include拷贝一份到 /usr/include就好了
sudo cp -r opencv /usr/local/include
sudo cp -r opencv2 /usr/local/include
当然,也写出,删除命令:
sudo rm -r opencv
sudo rm -r opencv2
这个目录也和前面的 /usr/include 效果差不多
这次没有红色警告了,也有输入提示了