Graph Cut Ransac代码编译过程

2024-06-07 23:18

本文主要是介绍Graph Cut Ransac代码编译过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、 论文简介

Graph Cut Ransac来自于CVPR2018,本文提出了一种新的鲁棒估计算法,叫做图割RANSAC,简称GC-RANSAC。当找到当前最好模型时,该算法在局部优化中使用图割算法来区分局内点和局外点。本文提出的局部优化算法理论简洁、易于实现,运行效率高。
原文链接:https://www.researchgate.net/publication/317356965_Graph-Cut_RANSAC/download
github源码:https://github.com/danini/graph-cut-ransac
论文讲解:http://www.jintiankansha.me/t/qrfUea99AY

二、 代码编译

对于这份代码的编译耗费了我很多时间,我觉得这份代码是在windows下用VS2015或更高版本编写的,很多头文件在ubuntu16.04中根本不存在,因此编译花了几天时间。

1、拿到代码立即编译,会出现这个错误

GCoptimization.cpp:11:17 fatal error: ppl.h: 没有那个文件或目录

在这里插入图片描述
解决方案:对于这个错误,github上有人提问:https://github.com/danini/graph-cut-ransac/issues/9, 作者给出了解决方案: s u d o a p t − g e t i n s t a l l l i b c p p r e s t − d e v \color{blue}{sudo apt-get install libcpprest-dev} sudoaptgetinstalllibcpprestdev
但是运行了这个命令之后,依然会报该错误,后来发现这里只是安装了pplx而非ppl,因此需要引入pplx.h的头文件,我的机器上pplx.h的的路径为:usr/include/pplx/pplx.h, 那么我们在GCoptimization.cpp中将#include <ppl.h> 改为 #include “usr/include/pplx/pplx.h” 即可。

2、改完这里,再次make,出现了如下的错误

GCoptimization.h:140:28:error: ‘DBL_MAX’ was not declared in this scope

在这里插入图片描述
解决方案: 这个错误相对容易解决,在GCoptimization.h中加入 #include <float.h>即可。

3、接下来继续make,出现了如下的错误

GCRANSAC.h:3:39: fatal error: opencv2\highgui\highgui.hpp:没有那个文件或目录

在这里插入图片描述
解决方案:这是因为linux的路径跟windows的区别,这里将斜杠改一下即可,在GCRANSAC.h中包含头文件的部分将这个路径改为:opencv2/highgui/highgui.hpp即可。

4、接下来继续make,出现了如下的错误

main.cpp:23: fatal error: direct.h :没有那个文件或目录

解决方案: 在main.cpp中直接注释#include <direct.h>即可。

5、接下来继续make,出现了如下的错误

prosac_sampler.h:170:5:error: ‘cout’ is not a member of ‘std’

在这里插入图片描述
解决方案:在prosac_sampler.h中加入cout的头文件<iostream>即可。

6、接下来继续make,出现了如下的错误

GCRANSAC.h:77:7:error: ‘unique_ptr’ in namespace ‘std’ does not name a template type std::unique_ptr<theia::ProsacSampler<cv::Mat >> prosac_sampler;

在这里插入图片描述
解决方案:查找unique_ptr,发现位于:/usr/include/c++/5/bits/unique_ptr.h, 因此在GCRANSAC.h加入头文件:#include “/usr/include/c++/5/bits/unique_ptr.h”,

7、接下来继续make,出现了如下的错误

estimator.h:120:4:error: ‘vector’ was not declared in this scaope

在这里插入图片描述
解决方案:在estimator.h中加入头文件即可#include < vector >即可。

8、接下来继续make,出现了如下的错误

estimator.h:122:4:error: ‘concurrency’ has not been declared concurrrency::parallel_for(0,(int)data.size(),[&](int i)

在这里插入图片描述
解决方案:没有详细处理,把这里的并行改为了串行。
在这里插入图片描述

9、接下来继续make,出现了如下的错误

main.cpp:78:25:error: ‘_makedir’ was not declared in this scope

在这里插入图片描述
解决方案:参见博客:https://www.cnblogs.com/matthew-2013/p/4675366.html
在这里插入图片描述

10、接下来继续make,出现了如下的错误

在这里插入图片描述
源码为:
在这里插入图片描述
解决方案:经查发现上述for循环的写法需要c++14支持,因此需要改动两处:
1)根目录CMakeLists.txt中将 set(CMAKE_CXX_STANDARD 17) 改为 set(CMAKE_CXX_STANDARD 14)
2)升级系统gcc/g++编译器到7.4.0, 安装命令如下:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test  
sudo apt-get update
sudo apt-get install gcc-7 g++-7# 安装完成之后,再将其与最新版本之间建立链接。每次输入gcc,g++时
# 自动使用最新版本。其默认安装位置 /usr/bin/
# 方法一:强制建立新链接。
sudo ln -s /usr/bin/gcc-7  /usr/bin/gcc -f
sudo ln -s /usr/bin/g++-7  /usr/bin/g++ -f

11、 最后再make,程序编译通过,运行样例。生成的程序在主目录的bin文件夹下,不过需要首先在主目录下创建results文件夹。运行结果为:

在这里插入图片描述
results:
在这里插入图片描述

这篇关于Graph Cut Ransac代码编译过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1040577

相关文章

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

MybatisPlus3.3.1整合clickhouse的过程

《MybatisPlus3.3.1整合clickhouse的过程》:本文主要介绍MybatisPlus3.3.1整合clickhouse的过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定... 前言ClickHouse是俄罗斯Yandex发布的一款数据分析型数据库支持sql语法,详情可以访问官网,

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

Java 压缩包解压实现代码

《Java压缩包解压实现代码》Java标准库(JavaSE)提供了对ZIP格式的原生支持,通过java.util.zip包中的类来实现压缩和解压功能,本文将重点介绍如何使用Java来解压ZIP或RA... 目录一、解压压缩包1.zip解压代码实现:2.rar解压代码实现:3.调用解压方法:二、注意事项三、总

Linux实现简易版Shell的代码详解

《Linux实现简易版Shell的代码详解》本篇文章,我们将一起踏上一段有趣的旅程,仿照CentOS–Bash的工作流程,实现一个功能虽然简单,但足以让你深刻理解Shell工作原理的迷你Sh... 目录一、程序流程分析二、代码实现1. 打印命令行提示符2. 获取用户输入的命令行3. 命令行解析4. 执行命令

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

Spring AI 实现 STDIO和SSE MCP Server的过程详解

《SpringAI实现STDIO和SSEMCPServer的过程详解》STDIO方式是基于进程间通信,MCPClient和MCPServer运行在同一主机,主要用于本地集成、命令行工具等场景... 目录Spring AI 实现 STDIO和SSE MCP Server1.新建Spring Boot项目2.a

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动