源碼實踐指南!Mastering opencv Ch3 Markerless AR--UBUNTU下 opencv+opengl 運行

未經博主允許,不得轉載,謝謝理解

如何用相機自己完成無標識AR的實踐,初試者可以參考這本經典教材《Mastering OpenCV》,國內譯版譯得有點像谷歌翻譯,不推薦,推薦大家直接讀原文瞭解作者實踐的思路,也可以參考我的博客--《Mastering OpenCV》--3.Markless AR.無標識式AR (1)《Mastering OpenCV》--3.Markless AR.無標識式AR (2)結合中英文版本和自己的理解給出的一些實踐流程和細節,如有不妥,歡迎討論指正。

對於源碼的實踐,我在編譯時也覺得一系列的編譯問題真的很頭疼,還好最後都解決了。畢竟作者出版這本書太久了,如果不想自己修改源碼實現編譯的話,真的就要花一些功夫。這裏給出我在ubuntu下成功編譯的源碼,以及應用程序。有部分修改,注意的是,標定參數爲我自己的相機標定後的參數,main函數中的calibration需要修改成您自己的相機參數。

下載地址:https://download.csdn.net/download/jucilan3330/10647771


環境:ubuntu 14.04 OpenCV-2.4.3 OpenGL-3.0 

下面開始源碼編譯pipeline

1.opencv版本問題

首先編譯一直出錯,原因就是ORB和FREAK在opencv3.1下根本不能按照他定義的函數變量去定義函數,ORB都是virtual的,FREAK是根本找不到。有博客說只能在opencv-2.4.2到2.4.5這幾個版本之間運行,源碼下載在github上可以找到。見https://github.com/opencv/opencv/tree/2.4.2 or https://github.com/opencv/opencv/tree/2.4.3。 書中作者用的是2.4.2。

2.cmake安裝

首先下載cmake-gui(我個人覺得用gui比較直觀)

  • 安裝
sudo apt-get install cmake-qt-gui
  • 打開:
cmake-gui

3.opengl+opencv編譯問題

因爲opencv編譯,默認是不支持opengl的,所以你必須下源碼重新編譯。

如何在cmake編譯opencv中將opengl支持加入,參考https://blog.csdn.net/Simple_Xiao/article/details/53978608的 “二、開始重編譯“部分

  1. 在源碼下新建build文件夾。
  2. 按下圖輸入cmake配置
  3. 依據上文參考網址完成generate

 

4.opencv編譯

爲了與之前安裝的其他版本opencv不衝突,進入源碼的build目錄下

輸入以下指令。

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/open-2.4.3 ..

make

sudo make install

至此 opencv2.4.3 with OPENGL就已經完成了

 

5.編譯代碼中的使用

請在CMakeLists.txt裏添加如下指令:

重點在於 SET OpenCV_DIR . 

對於不同的項目 也可以通過修改這一行命令 set(OpenCV_DIR "/usr/local/opencv-可選擇你要指定的opencv版本所在文件夾/share/OpenCV" )

cmake_minimum_required(VERSION 2.8)
project(xxx)


#OpenCV

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


   
target_link_libraries( joinmap ${OpenCV_LIBS} )
 

install(TARGETS xxx RUNTIME DESTINATION bin)

6.其他opengl編譯問題

我裝的是opengl3.0版本,首先main函數和ARDrawingContext函數,要修改

#include <gl/gl.h>
#...
#...

// !!!
//修改成下面
#include <GL/glu.h>
#include <GL/glut.h>
#include <GL/gl.h>

程序編譯時遇到錯誤:

/usr/bin/ld: CMakeFiles/ar_demo.dir/ARDrawingContext.cpp.o: undefined reference to symbol 'glScalef'
//usr/lib/x86_64-linux-gnu/mesa/libGL.so.1: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

主要還是CMakeLists.txt沒能找到OpenGL的頭文件或者是沒能正確鏈接,修改CMakeList.txt即可,具體修改可以下載源碼查看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章