按照上篇之一的进度,已经编译及安装好了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:
为什么会出现这么多警告?我也不知道
三、移植至开发板
未完在续。。。。。。