接下来说说正题,安装opencv,有多种办法,但整体分为两大类,从镜像源里安装和自编译,自编译安装通用性好,尤其对于有一些生僻的架构,但,从镜像源里安装,是由一些人员编译完了,分类打包,好处是不需要编译就可以,与操作系统协调性好,但是缺点也比较多,例如,最新版往往不能及时提供,卸载麻烦等,总之有利有弊。
高通410c提供的alip版本内部已经提供了一些用于opencv程序运行的so库,但是为了开发,我们需要重新从源里索引一下,使用如下命令:
sudo apt update
源里提供的libopencv-dev,提供了opencv.pc,这是务必要装的,便于使用pkg-config;我从源里安装的opencv文件如下:
- linaro@linaro-alip:~$ dpkg -l|grep opencv
- ii libopencv-calib3d-dev:ARM64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-calib3d
- ii libopencv-calib3d2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision Camera Calibration library
- ii libopencv-contrib-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-contrib
- ii libopencv-contrib2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision contrib library
- ii libopencv-core-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-core
- ii libopencv-core2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision core library
- ii libopencv-dev 2.4.9.1+dfsg-1+deb8u1 arm64 development files for opencv
- ii libopencv-features2d-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-features2d
- ii libopencv-features2d2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision Feature Detection and Descriptor Extraction library
- ii libopencv-flann-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-flann
- ii libopencv-flann2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision Clustering and Search in Multi-Dimensional spaces library
- ii libopencv-gpu-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-gpu2.4
- ii libopencv-gpu2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision GPU library
- ii libopencv-highgui-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-highgui
- ii libopencv-highgui2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision High-level GUI and Media I/O library
- ii libopencv-imgproc-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-imgproc
- ii libopencv-imgproc2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision Image Processing library
- ii libopencv-legacy-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-legacy
- ii libopencv-legacy2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision legacy library
- ii libopencv-ml-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-ml
- ii libopencv-ml2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision Machine Learning library
- ii libopencv-objdetect-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-objdetect
- ii libopencv-objdetect2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision Object Detection library
- ii libopencv-ocl-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-ocl2.4
- ii libopencv-ocl2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision OpenCL support library
- ii libopencv-photo-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-photo2.4
- ii libopencv-photo2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision computational photography library
- ii libopencv-stitching-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-stitching2.4
- ii libopencv-stitching2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision image stitching library
- ii libopencv-superres-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-superres2.4
- ii libopencv-superres2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision Super Resolution library
- ii libopencv-ts-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-ts2.4
- ii libopencv-ts2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision ts library
- ii libopencv-video-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-video
- ii libopencv-video2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision Video analysis library
- ii libopencv-videostab-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 development files for libopencv-videostab2.4
- ii libopencv-videostab2.4:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 computer vision video stabilization library
- ii libopencv2.4-java 2.4.9.1+dfsg-1+deb8u1 all Java bindings for the computer vision library
- ii libopencv2.4-jni 2.4.9.1+dfsg-1+deb8u1 arm64 Java jni library for the computer vision library
- ii opencv-data 2.4.9.1+dfsg-1+deb8u1 all development data for opencv
- ii opencv-doc 2.4.9.1+dfsg-1+deb8u1 all OpenCV documentation and examples
- linaro@linaro-alip:~$ dpkg -l|grep libcv
- ii libcv-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 Translation package for libcv-dev
- ii libcv2.4 2.4.9.1+dfsg-1+deb8u1 all computer vision library - libcv* translation package
- ii libcvaux-dev:arm64 2.4.9.1+dfsg-1+deb8u1 arm64 Translation package for libcvaux-dev
复制代码
安装好了,我们再详细介绍pkg-config,此命令会查找环境变量PKG_CONFIG_PATH对应目录和/usr/lib/pkgconfig/下的.pc文件,其有三种参数,分别是list-all,cflags,libs
此下示例用法:
- linaro@linaro-alip:~$ pkg-config --list-all |grep opencv
- opencv OpenCV - Open Source Computer Vision Library
- linaro@linaro-alip:~$ pkg-config --cflags opencv
- -I/usr/include/opencv
- linaro@linaro-alip:~$ pkg-config --libs opencv
- /usr/lib/aarch64-linux-gnu/libopencv_calib3d.so -lopencv_calib3d /usr/lib/aarch64-linux-gnu/libopencv_contrib.so -lopencv_contrib /usr/lib/aarch64-linux-gnu/libopencv_core.so -lopencv_core /usr/lib/aarch64-linux-gnu/libopencv_features2d.so -lopencv_features2d /usr/lib/aarch64-linux-gnu/libopencv_flann.so -lopencv_flann /usr/lib/aarch64-linux-gnu/libopencv_gpu.so -lopencv_gpu /usr/lib/aarch64-linux-gnu/libopencv_highgui.so -lopencv_highgui /usr/lib/aarch64-linux-gnu/libopencv_imgproc.so -lopencv_imgproc /usr/lib/aarch64-linux-gnu/libopencv_legacy.so -lopencv_legacy /usr/lib/aarch64-linux-gnu/libopencv_ml.so -lopencv_ml /usr/lib/aarch64-linux-gnu/libopencv_objdetect.so -lopencv_objdetect /usr/lib/aarch64-linux-gnu/libopencv_ocl.so -lopencv_ocl /usr/lib/aarch64-linux-gnu/libopencv_photo.so -lopencv_photo /usr/lib/aarch64-linux-gnu/libopencv_stitching.so -lopencv_stitching /usr/lib/aarch64-linux-gnu/libopencv_superres.so -lopencv_superres /usr/lib/aarch64-linux-gnu/libopencv_ts.so -lopencv_ts /usr/lib/aarch64-linux-gnu/libopencv_video.so -lopencv_video /usr/lib/aarch64-linux-gnu/libopencv_videostab.so -lopencv_videostab
复制代码
此刻我们使用一个显示简单百度Logo的Demo,代码如下:
- #include
- #include
- #include
- int main(void)
- {
- IplImage *img = cvLoadImage("baidu.png", 1);
- cvNamedWindow("Example", CV_WINDOW_AUTOSIZE);
- cvShowImage("Example", img);
- cvWaitKey(0);
- cvReleaseImage(&img);
- cvDestroyWindow("Example");
- return 0;
- }
复制代码
命令行gcc编译有两种办法,一种使用-I、-l等指定共享库和头文件;另一种则是使用pkg-config,使用如下:
- linaro@linaro-alip:~$ gcc -o main main.c `pkg-config --cflags --libs opencv`
- /usr/bin/ld: /tmp/ccbQ85Ps.o: undefined reference to symbol 'lrint@@GLIBC_2.17'
- //lib/aarch64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
- collect2: error: ld returned 1 exit status
复制代码
会发现报错,此错是由于没添加math库,使用如下命令就可以:
- linaro@linaro-alip:~$ gcc -o main main.c `pkg-config --cflags --libs opencv` -lm
- linaro@linaro-alip:~$
复制代码
我们切换到vnc看看效果:
接下来我们使用eclipse,要使用eclipse,也有两种,源里和IBM提供源码编译,由于IBM只提供x86和x64的二进制, 使用如下命令就可以:
- sudo apt install eclipse-cdt
复制代码
就可以了,接着在eclipse使用opencv,要想使用,则需要配置相关的参数,选择项目的属性,不是Eclipse里的Window下的属性,选择C/C++ Build->Settings,直接按下图配置就行: