1. 程式人生 > >OpenCV在linux平臺的編譯、安裝和使用

OpenCV在linux平臺的編譯、安裝和使用

分六個部分介紹:
  • 一、下載跨平臺編譯工具 CMake 
下載地址:http://www.cmake.org/cmake/resources/software.html
  • 二、解壓、編譯 CMake
tar xvfz cmake-2.8.12.1.tar.gz makedir -p ~/comake cd cmake-2.8.12.1 ./configure --prefix="~/comake" make && make install
  • 三、下載 OpenCV
http://opencv.org/
  • 四、編譯 OpenCV
unzip opencv-2.4.8.zip cd opencv-2.4.8 建立編譯環境目錄,這個後面會用到,其中會生成一個unix-install目錄,方便編譯時指定包含標頭檔案路徑和lib庫路徑 mkdir test_cmake cd test_cmake/ 我們假定安裝目錄為~/opencv/ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=~/opencv/ .. make   make過程比較漫長,可能會出現一些錯誤。參考本文末尾說明。 make install 修改環境變數PKG_CONFIG_PATH:在/etc/profile中寫入export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:your_opencv_cmake_path/unix-install 其中,your_opencv_cmake_path就是用來編譯opencv的路徑,如上示例中是~/opencv-2.4.8/test_cmake 修改動態連結庫查詢路徑:  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/opencv/lib/
  • 五、編譯運用程式
先建立一個opencv運用源程式,也可以用samples下的例項, 假定程式是hello.cpp 可以有兩種方法編譯: 1、用cmake, 建立 CMakeList.txt , 加入以下內容: cmake_minimum_required(VERSION 2.8) project( hello ) set(OpenCV_DIR ../opencv-2.4.8/make_dir ) find_package( OpenCV REQUIRED ) include_directories( ${OpenCV_INCLUDE_DIRS} ) add_executable( hello hello.cpp )
target_link_libraries( hello ${OpenCV_LIBS} ) 注意配置OpenCV_DIR, 其實是我們之前建立的make目錄,以便cmake能找到unix-install下關於安裝路徑、標頭檔案、libs等資訊。 執行 cmake . && make  生成了hello可執行程式,大功告成! 2、直接用g++、gcc gcc `pkg-config --cflags --libs opencv` -o hello hello.cpp 我們在編譯安裝opencv時設定的環境變數PKG_CONFIG_PATH 起作用了, 它從unix-install下面找到了include標頭檔案和libs的路徑。 執行./hello , 如果出現找不到*.so*檔案,說明LD_LIBRARY_PATH的設定有問題,不是安裝之後lib存放的路徑。

  • 六、編譯過程出錯的處理

1、 opencv-2.4.8/modules/core/include/opencv2/core/types_c.h  __m128d was not declared in this scope

解決方法:增加

#  if defined __SSE2__

    # undef __SSE2__

#endif

2、 /home/users/lvwenxian/lvwenxiandisk/freedom/object-mining/opencv-2.4.8/modules/core/include/opencv2/core/operations.hpp  addParam redifined

解決方法:刪掉前面定義的那一個

3、 opencv-2.4.8/modules/highgui/src/grfmt_png.cpp:388: error: `Z_FIXED' was not declared in this scope

原因是包含了系統標頭檔案路徑/usr/include/zlib.h , 對應的zlib版本太老。解決方法:

開啟opencv-2.4.8/modules/highgui/src/grfmt_png.cpp ,增加:

#define Z_FIXED 4

4、 opencv-2.4.8/modules/highgui/src/grfmt_tiff.cpp:463: error: `PREDICTOR_HORIZONTAL' was not declared in this scope

原因同上,tiff庫版本太老, 增加: #define     PREDICTOR_HORIZONTAL    2  

5、 make64[2]: *** [modules/java/core+CvException-jdoc.java] 錯誤 1

    make64[1]: *** [modules/java/CMakeFiles/opencv_java.dir/all] 錯誤 2

CMakeLists.txtjavaJava相關配置都刪掉,不便宜這些東西。

然後重新執行編譯過程

6. opencv 2.4.x 編譯時,出現的 freak.cpp:437: error: unable to find a register to spill in class 'GENERAL_REGS'錯誤。    參見: http://blog.csdn.net/cheng1988shu/article/details/9704041