交叉编译opencv3.1.0和opencv_contrib/,在R16上运行HelloOpencv程序

http://www.cnblogs.com/asmer-stone/p/5089764.html

http://blog.csdn.net/gatieme/article/details/49080355

以上是参考文章。

1)使用下面的命令安装依赖库,可能不全,缺什么搜索后再安装什么库即可。

sudo apt-get install build-essential

sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-devlibavformat-dev libswscale-dev  cmake-qt-gui

sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-devlibpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

2)下载opencv3.1.0源代码地址:https://github.com/opencv/opencv/releases/tag/3.1.0。

3)检查cmake版本

cmake --version

cmake version 2.8.12.2

4)配置opencv cmakelist

/home/xxx/opencv-3.1.0源代码目录下输入cmake-gui,“Grouped” "Advanced".


下面绿色部分时编译使用的交叉编译工具gcc gcc和bin路径。




修改CMAKE_INSTALL_PREFIX变量改为/home/xx/opencv-3.1.0/_install

去掉tiff选项

5)关闭cmake_gui后,进入output目录执行make make install

make时会有-fPIC的错误,可以在opencv目录下的3rdparty中添加set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC"),然后重新运行cmake_gui。

或者在output目录下的3rdparty中找到对应的flags.mak,添加上-fPIC即可。

6)将_install下的头文件目录,bin文件目录,lib目录下的左右文件拷贝到目标arm-linux上。

7)拷贝lena.jpg文件到目标arm-linux上的mnt目录下,或者其他目录。

8)使用如下CPP和cmakelist文件进行编译。

#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;
int main(int argc,char* argv[]){

	string path="/mnt/lena.jpg";

	Mat image = imread( path, 1 );

	if(image.isContinuous()){
		cout<<"read picture successfully!"<<endl;
	}else{
		cout<<"fail to read picture!"<<endl;
	}
	cout<<"CV_VERSION=<"<<CV_VERSION<<endl;
	return 0;

}

# this is required
set(CMAKE_SYSTEM_NAME Linux)

set(CMAKE_FIND_ROOT_PATH /home/xxx/prebuilt/gcc/linux-x86/arm/toolchain-sunxi/toolchain/bin)
set(ARM_LINUX_SYSROOT /home/xxx/prebuilt/gcc/linux-x86/arm/toolchain-sunxi/toolchain/bin CACHE PATH "ARM cross compile system root")


# search for programs in the build host directories (not necessary)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

set(TOOLCHAIN_DIR "/home/xxx/prebuilt/gcc/linux-x86/arm/toolchain-sunxi/toolchain/bin")

set(CMAKE_C_COMPILER "/home/xxx/prebuilt/gcc/linux-x86/arm/toolchain-sunxi/toolchain/bin/arm-openwrt-linux-gcc")
set(CMAKE_CXX_COMPILER "/home/xxx/prebuilt/gcc/linux-x86/arm/toolchain-sunxi/toolchain/bin/arm-openwrt-linux-g++")


set(CMAKE_VERBOSE_MAKEFILE ON)


cmake_minimum_required(VERSION 2.8)
project( HelloOpencv )


set(OpenCV_DIR /home/xxx/opencv-3.1.0/output)
set(OpenCV_LIBS /home/xxx/opencv-3.1.0/_install/lib)
include_directories(/home/xxx/opencv-3.1.0/_install/include)

find_package( OpenCV REQUIRED )
add_executable( HelloOpencv helloopencv.cpp )
target_link_libraries( HelloOpencv ${OpenCV_LIBS} )

9)将编译好的HelloOpencv拷贝到目标机器上运行,结果如下说明程序运行程序,opencv库添加成功。


10)必须先编译opencv然后在交叉编译opencv_contrib,只是将OPENCV_EXTRA_MODULES_PATH”,设置其参数值为open_contrib源码包中的modles目录,再次编译即可。

验证opencv_contrib编译成功可以看看lib下的文件个数,超过10个以上就可以初步认为opencv_contrib/编译成功。


猜你喜欢

转载自blog.csdn.net/tankaro/article/details/74451812