在OpenCV官网下载linux安装包:http://opencv.org/downloads.html,解压到/opt/EmbedSky/opencv下,然后cd进入解压文件夹。
在解压目录下运行:
./configure --host=arm-linux --without-gtk --without-carbon --without-v4l --without-v4l2 --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --enable-static --enable-shared --disable-apps CXX=arm-linux-g++ --prefix=/home/wudean/opencv-1.0.0/_install
注:
· --host=arm-linux :指出交叉编译arm平台
· --without-gtk:忽略gtk+2.0 windows
· --without-carbon: 不使用Mac OS上的X库
· --without-quicktime
· --without-1394libs
· --without-ffmpeg
· --without-python
· --without-swig
· --without-v4l --without-v4l2:不需要v4l和v4l2
· --enable-static :生成静态库
· --enable-shared:生成动态库,这一项必须要有,不要以后可能会出现加载动态库失败
· CXX=arm-linux-g++ :指定编译工具(我用的是TQ提供的4.3.3)
· --prefix=/opt/EmbedSky/opencv/_install:这个是安装目录,最好是这样做,以免污染系统
OpenCV会用到一些dev的包,如png.h,jpeglib.h,所以需要预先交叉编译好zlib/png/jpeg库,把他们生成的*.h放到相应的交叉编译器的include里,*.so.*放到lib,还要拷贝到目标板的根目录的lib中。
特别要注意的:
如果在编译时出现png.h: No such file or directory ,意即缺少开发
make
注:make过程中可能出现
../../cxcore/include/cxmisc.h:133:6: error: #elif with no expression
打开cxmisc.h:把#elif改为#else
如果在编译时出现png.h: No such file or directory ,意即缺少开发库,先交叉编译zlib/png/jpeg
make install
在_install目录下回出现:include lib share 三个目录,这些是我们需要的。
修改_install/lib/pkgconfig/opencv.pc的Libs项中加入参数-lpthread、-ldl之类,例如
Libs: -L${libdir} -lcxcore -lcv -lhighgui -lcvaux -lml -lpthread -lz -lpng -ljpeg -ldl
修改PC主机的 /etc/bashrc 文件,在最后添加以下内容:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/wudean/opencv-1.0.0/_install/lib/pkgconfig
重启电脑!!!
这样就可以交叉编译我们的应用程序:share/opencv/sample/c/里的例子:
arm-linux-g++ drawing.c -o drawing `pkg-config --cflags --libs opencv`
arm-linux-g++ facedetect.c -o facedetect `pkg-config --cflags --libs opencv`
注:交叉编译的应用程序是不能再目标板上运行的,因为需要gtk的窗口库。
修改build_all.sh:把g++改为arm-linux-g++后就可以运行了。
注意上面的··是Tab见上面的执行命令键(将··中命令执行的结果作为g++的参数)
在PC上Linux上安装也是一样:
但是,那些程序都可以编译,但是在运行时报错:
error:whiling loading shared libraries:libcxcore.so.l:can not open shared librarise:No such file or directory
解:將/usr/local/lib/ 底下有關opencv的lib全部複製到 /usr/lib 底下就可執行了!
To run with a parameter:
./facedetect --cascade="haarcascades/haarcascade_frontalface_alt.xml" baboon.jpg