macos big sur 自带 python3_MacOS上使用 cv::viz

本文介绍了在macOS Big Sur上,因Homebrew安装的OpenCV缺少viz模块,如何自编译OpenCV以解决该问题。作者详细阐述了编译过程,包括克隆源码、切换分支、安装依赖、配置CMake和编译,并在成功后进行了试用,验证了viz模块的功能。
摘要由CSDN通过智能技术生成

1. 前提摘要

最近准备在mac上跑一下这个东西: https://github.com/MIT-SPARK/Kimera-vio,MIT的大佬真的厉害,克隆下来翻代码看,有好多非常精妙(不知道在写什么)的方法类,弄得我一愣一愣的,就好比这个用来测量一个函数运行时间的,一开始我愣是不知道为啥一定要写成std::forward<decltype(func)>(func)

template <typename T = std::chrono::milliseconds>
struct Measure {
  template <typename F, typename... Args>
  static typename T::rep execution(F&& func, Args&&... args) {
    auto start = std::chrono::steady_clock::now();
    std::forward<decltype(func)>(func)(std::forward<Args>(args)...);
    auto duration =
        std::chrono::duration_cast<T>(std::chrono::steady_clock::now() - start);
    return duration.count();
  }
};

关于这个代码的解释,StackFlow上也有,也是来自《Effective Modern C++》这本书上的(然鹅这本书被我荒废在宿舍很久了...),我也有那么一点意会,但这里就不展开了,之后可能会有相关的KimeraVIO的解析文章。

话说回来,今天的主要目的是,是能够编译运行 Kimera-VIO,但是这个东西使用了OpenCV的viz模块来做显示,请看!!!

8807b132cfc6ded2937f9cddb022c818.png
需要用 viz

那么问题就来了,MacOS上通过Homebrew安装的OpenCV,是不带viz的... (哭泣.jpg),这就导致了,在编译的时候突然跑出来:找不到 #include <opencv2/viz/types.hpp>

509339230efce2ac36f47b2c3a5d43f1.png
brew 里装的opencv无viz

那么只能自己编译了。正当我想骂一句MIT SPARK,你明说mac上可以爽快(爽快是我意淫的)地用,为毛我这里编译都不通过了???我意外看到了,嗯??还有一个安装说明?? ???Tested on Mac, Ubuntu 14.04, 16.04 & 18.04.....

bed00b3ef7bd5fca8d5e8cc2fc6c6ac4.png

往下拉拉,看到了关于OpenCV的部分 ‍♂️ ‍♂️ ‍♂️ ‍♂️ ‍♂️ ‍♂️ 好吧,我瞎了,真的要自己编译。

708136fc5600aa9a411568b17d31db3c.png

2. 编译!!!

首先,我们从github将opencv克隆下来,这个克隆的时间还是蛮久的,不过可以挂个代理啥的。为了表示诚意,我已经打包放百度云上了,有绅士想要zip文件的可以留言私戳...

50bd0343f9a908731ad14069d84f9447.png
真大啊

这时候就有老哥要问了,我克隆的时候用

git clone XXX --depth=1

不就让拷下来的包又小,速度就快了吗??那我就是想要完整的你能怎么我

在把opencv弄下来之后,我们需要切换到非4.X的分支,我大概看了一下,4.X怎么没有viz.hpp这个头文件???( 尼克杨.jpg ),我是切换到了3.4.10 来操作的

git checkout tags/3.4.10

OpenCV的默认编译配置中,是不包括 viz 模块的,为了启用这一个的编译,必须先安装vtk,如果已经安装 brew 的朋友,就直接如下安装(顺便连tbb也一起装了吧)

brew install vtk tbb

没有安装的朋友,装完 brew 后我们还是朋友....

然后:

  1. cd到opencv的文件夹下,然后新建一个名叫build的文件夹,用于存放编译产生的文件
  2. 进入build文件夹下,使用cmake配置编译选项,接着make执行编译。

具体来说,我自己的CMake的配置项为:

cmake  -DWITH_VTK=On -DWITH_TBB=On -DBUILD_opencv_python2=OFF -DBUILD_opencv_python3=ON -DWITH_QT=ON -DOPENCV_ENABLE_NONFREE=ON   ..

解释一下一些选项:开启VTK和TBB的编译选项。然后由于python2在2020年已经“寿终正寝”了,系统里自带的python2和brew的python@2经常有莫名其妙的兼容问题,就不编python2的部分了。而OpenCV在官网有那么一个说明,就是要编译python3的话还得3.8:

10c24ec023280aa1442711b50b33cb6c.png
需要 python3.8

安装python3.8也可以使用 brew 完成:

brew uninstall --ignore-dependencies python
brew install python@3.8
brew link python@3.8 --force

在配置的过程中,还得下一个 ipp**什么什么的东西,这就要求终端必须也处于代理的环境下,才比较快。在终端启用代理得像下面这样设置环境量(我是不是应该把这段放在前面,这样git clone的时候也会快点):

export all_proxy=http://127.0.0.1:1087

上面都没啥问题之后,就花半小时左右等待编译把~

3. 试用

这一节,大概试试viz能不能用。首先我们新建一个工作区来做有关viz的试验(之后说不定还会再写几篇有关viz的...咕咕咕)

mkdir viz_tutorial_ws
cd viz_tutorial_ws
touch CMakelists.txt

CMakelists.txt 内容如下:

cmake_minimum_required (VERSION 3.5)
project(viz_tutorial VERSION 0.1.0)

set(CMAKE_CXX_STANDARD 17) # 个人习惯

find_package(OpenCV 3.3.1 REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(launch_viz launch_viz.cpp)
target_link_libraries(launch_viz ${OpenCV_LIBRARIES})

添加一个源文件launch_viz.cpp,其内容如下:

#include <opencv2/viz.hpp>
using namespace std;

int main()
{
    auto window = cv::viz::getWindowByName("iceytan");

    while(!window.wasStopped())
    {
        window.spinOnce();
    }
    return 0;
}

接着

mkdir build && cd build && cmake .. && make && launch_viz

可以看到viz的窗口出现了,虽然里面什么都没有,但你说我激动不激动!!这样一来kimeraVIO也可以编译了!!

4dcef767fa9cd6a06b353cea93b95bb9.png

那就先这样吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值