Ubuntu上交叉编译opencv及opencv_contrib并移植到ARM板之二

按照上篇之一的进度,已经编译及安装好了opencv库及opencv_contrib扩展库。

安装好库之后,无非就还有两件事要做:1、配置环境    2、实例编译    3、移植至开发板


一、环境配置

说明:pkg-config是用于编译时指定第三方库的头文件路径及链接库路径的,我们需要借助pkg-config来编译opencv程序。

pkg-config的工作流程:通过XXX.pc文件来找到指定的头文件及库路径的,而XXX.pc文件的路径又需要在环境变量PKG_CONFIG_PATH中指出。

因此,要做两步动作:写XXX.pc文件,设置环境变量

XXX.pc文件的格式:

Name: xxx
Description: xxx
Version: xxx
Cflags:-I/usr/local/include
Libs:-L/usr/local/lib –lxxx –lxxx


1、创建并编辑opencv-arm.pc文件

在/usr/local/arm/opencv-arm目录下创建pkgconfig:

$ mkdir pkgconfig

进行pkgconfig目录下创建并编辑opencv-arm.pc,内容如下:


#Packet Information for pkg-config

prefix=/usr/local/arm/opencv-arm
include_dir=${prefix}/include

Name: opencv-arm
Description: Open Source Computer Vision Library for arm
Version: 3.2.0
Cflags: -I${include_dir}
Libs: -L${prefix}/lib -lopencv_aruco -lopencv_flann -lopencv_plot -lopencv_tracking -lopencv_bgsegm -lopencv_fuzzy -lopencv_reg -lopencv_videoio -lopencv_bioinspired -lopencv_highgui -lopencv_rgbd -lopencv_video -lopencv_calib3d -lopencv_imgcodecs -lopencv_saliency -lopencv_videostab -lopencv_ccalib -lopencv_imgproc -lopencv_shape -lopencv_xfeatures2d -lopencv_core -lopencv_line_descriptor -lopencv_stereo -lopencv_ximgproc -lopencv_datasets -lopencv_ml -lopencv_stitching -lopencv_xobjdetect -lopencv_dnn -lopencv_objdetect -lopencv_structured_light -lopencv_xphoto -lopencv_dpm -lopencv_optflow -lopencv_superres -lopencv_face -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_features2d -lopencv_photo -lopencv_text

就以上几项

Name: XXX.pc的文件名,如opencv-arm.pc就取opencv-arm

Description:随便填下

Version:opencv的版本号

Cfalgs:指定头文件的路径(-I+opencv头文件路径,如#include "opencv2/core.hpp"这样的,就只需指到opencv2的上一级include,若指定到opencv2,则只需#include "core.hpp")

Libs:指定库路径及列出所有的链接库


2、配置环境变量

跟ubuntu上配置opencv库环境类似,编辑 /etc/bash.bashrc 文件,在最后添加上

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/arm/opencv-arm/pkgconfig


红框为新增,71为ubuntu安装opencv时所加。

注意是pkgconfig目录的路径,即opencv-arm.pc所在的目录

编辑完,保存。

然后,使环境变量生效:

$ source /etc/bash.bashrc


二、实例编译

1、创建并编辑 example.cpp 文件

#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>

using namespace cv;
using namespace std;


int main()
{
    cout << "Hello OpenCV " << CV_VERSION << endl;

	// 载入图像myImage.JPEG,可换其他格式
	Mat myMat = imread("myImage.JPEG", 1);

	// 创建一个窗口
	namedWindow("Opencv Image");

	// 显示图像
	imshow("Opencv Image", myMat);

	// 等待按键延时 ms
	waitKey(5000);

    return 0;
}

十分简单的程序,用于显示一张图片。图片格式可换其他,如 *.jpg *.png等,代码中更改对应的文件名即可。


2、交叉编译

输入以入命令:

$ arm-linux-g++ `pkg-config --cflags opencv-arm` `pkg-config --libs opencv-arm` -lpthread -lrt -ldl example.cpp -o example

用 arm-linux-g++编译器,pkg-config指定链接的第三方库,还链接了线程库pthread、rt库、dl库,将example.cpp编译成example目标文件。

结果:

编译通过,生成目标example,但出现了很多warning:


为什么会出现这么多警告?我也不知道


三、移植至开发板



未完在续。。。。。。


猜你喜欢

转载自blog.csdn.net/qq_30155503/article/details/80005622
今日推荐