OpenCV在linux平台的编译、安装和使用

来源:互联网 发布:淘宝网水晶珠帘 编辑:程序博客网 时间:2024/05/16 07:51
分六个部分介绍:
  • 一、下载跨平台编译工具 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
0 0
原创粉丝点击