未經博主允許,不得轉載,謝謝理解
如何用相機自己完成無標識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的 “二、開始重編譯“部分
- 在源碼下新建build文件夾。
- 按下圖輸入cmake配置
- 依據上文參考網址完成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即可,具體修改可以下載源碼查看。