系统:虚拟机ubuntu16.04
参考大牛贴:
https://blog.csdn.net/avideointerfaces/article/details/89477828
我基本上都是按照这位老师的帖子进行的,大部分都一样,中间遇到了一些问题,因此自己记录下来。
1、 下载
下载opencv343,opencv343-contrib
wget -O opencv-3.4.3.zip https://github.com/Itseez/opencv/archive/3.4.3.zip
wget-O opencv_contrib-3.4.1.zip https://github.com/Itseez/opencv_contrib/archive/3.4.1.zip
unzip opencv-3.4.3.zip
unzip opencv_contrib-3.4.1.zip
2、 安装cmake和cmake-gui
apt install cmake cmake-gui –y
3、 使用cmake-gui生成编译文件,主要是generate之后的一些配置
- l 执行cmake-gui,打开界面,配置如下,build路径需要自己新建:
![a84c792d47b88547222af553945b8b6d.png](https://i-blog.csdnimg.cn/blog_migrate/9756e6446b5faa4e54d3e167280339b6.png)
- l 配置点击configure-cross com…:
![0db971edd1d4a54a437b62a96793f9ab.png](https://i-blog.csdnimg.cn/blog_migrate/b940536c834262c143d2fdd7650f85a1.png)
Operation System --- arm-himix200-linux-gcc
gcc ---- /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc
g++ ---- /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-g++
- 点击finish后会configure一会直到成功
- 修改配置选项
1) 修改CMAKE_INSTALL_PREFIX
文件夹是我自己创建的
![dccf9c82af895fb690ca133f9c00006d.png](https://i-blog.csdnimg.cn/blog_migrate/666c2fe5d63523595d81a09049f57561.png)
2) 添加OPENCV_EXTRA_MODULE_PATH,也就是contrib路径
![a2bec86fac0637e1f3c05349bc22f955.png](https://i-blog.csdnimg.cn/blog_migrate/a73193680cfe8bea559c488ce15a46b3.png)
3) 添加CMAKE_EXE_LINKER_FLAGS
为防止后续源代码编译错误,还得加上下面配置 -lpthread –lrt -ldl
![94e3dfbed2340f66873d547873bb8a56.png](https://i-blog.csdnimg.cn/blog_migrate/780da4ef09acb53786d0615430589e8a.png)
这个是参考,我这样运行时,提示了一个错误:-lrt 找不到文件或目录
所以,我直接把-lrt删除了,重新generate后make,就成功了。
I don’t know why
![2a68c65cf373e0a3ac5d041eea072746.png](https://i-blog.csdnimg.cn/blog_migrate/302e04dc914d326b1cd4f210dd004805.png)
4) 添加ZLIB_INCLUDE_DIR
这个错误其实是我在编译的时候发现的,找不到zlib,采坑无数你懂得,所以这次就直接填上
路径: opencv-3.4.3/3rdparty/zlib
![9d01621254c41b5786381258f72d91c4.png](https://i-blog.csdnimg.cn/blog_migrate/f70197649119c53658fddda0952fb192.png)
5) 添加CMAKE_FIND_ROOT_PATH
主要是为了保险,路径
/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/
![ed8d1c0c0e46a690713ed57e52121e13.png](https://i-blog.csdnimg.cn/blog_migrate/eaa235fae1c8e014ab05a2b4789f9f9c.png)
6) 选中编译opencv_world库
![aa2a12bf73d559eede8e06ae5ad737a0.png](https://i-blog.csdnimg.cn/blog_migrate/bcd1e519a97d411846fc1a68f0bcdadb.png)
7)配置完成后点击generate来生成可编译得opencv代码。
![b6f825e6fe9cda018728d61713621087.png](https://i-blog.csdnimg.cn/blog_migrate/cad66239e3631978272aa045e24b96d4.png)
4、 编译过程调试,主要是缺失文件补充和包含文件路径的修改
l 虚拟机内存和核心修改
刚装好ubuntu虚拟机的时候,使用cmake-gui都好好,后来也不知道为什么,cmake-gui开启之后整个ubuntu系统都卡死了。用free看了一下内存情况,还剩余90%的内存呢,也不知道为什么会卡死(希望有经验的同学们指导一下我~)。查了一顿资料,有增加内存容量,增加cpu个数等等。我建虚拟机的时候就是8G的内存了,所以没有增加。查了一下cpu设置的个数是宿主机的一半比较合适,我设置了8个。设置完确实好转了,特别是make –j8的时候,opencv的编译大概在5min可以完成。下面是我的虚拟机配置。
![16324cd737ab028b70176b6ea9246c41.png](https://i-blog.csdnimg.cn/blog_migrate/02eab3404842bd6eda88858b795935db.jpeg)
l make –j8开始编译
![c70aa5b6833e638d016a4b1e91b11d00.png](https://i-blog.csdnimg.cn/blog_migrate/c563bb8ae9a2b11fa4733820236f34ab.png)
- 错误1 No suitable threading library available
解决方法:
vi ../opencv-3.4.3/3rdparty/protobuf/src/google/protobuf/stubs/http://common.cc
添加#Define HAVE_PTHREAD
![da207d3be50df1c91ba74bcc1f8282db.png](https://i-blog.csdnimg.cn/blog_migrate/720759e3de4fe2829b1c51c401d20cdc.png)
![c70aa5b6833e638d016a4b1e91b11d00.png](https://i-blog.csdnimg.cn/blog_migrate/c563bb8ae9a2b11fa4733820236f34ab.png)
- 缺失文件补充
fatal error: vgg_generated_120.i,vgg_generated_80.i,vgg_generated_40.i,vgg_generated_64.i,boostdesc_bgm.i等
![25737a9d7cd432b3ea4fb1862afa0321.png](https://i-blog.csdnimg.cn/blog_migrate/00f72622ef7bbb74f5d25a68ac0ea1f8.png)
解决方法,
把确实的文件下载下来,拷贝进opencv_contrib-3.4.3/modules/xfeatures2d/src文件夹下,继续编译就好了。
缺失文件下载路径:
链接:https://pan.baidu.com/s/1-PA3ItqCCiaNUXZxIHHiIg
提取码:xlpn
修改include路径:
opencv-3.4.3/modules/stitching/include/opencv2/stitching/detail/matchers.hpp:52:42: fatal error: opencv2/xfeatures2d/cuda.hpp: No such file or directory
# include "opencv2/xfeatures2d/cuda.hpp"
![0aa3927c8d0ee4e033206cae9fac391e.png](https://i-blog.csdnimg.cn/blog_migrate/da988679a67c0e00663aa3cc2f457d8c.png)
![20cd6ba94f1e492f225f30144e382e81.png](https://i-blog.csdnimg.cn/blog_migrate/5073cdf2404b8d851d58905f7ddf3dcc.png)
类似错误都是修改include路径,或者在cmaklist里面包含(这个应该是最方便的,我因为不熟没有尝试,好在报错的不多,我就一一按照错误提示修改了头文件)
![20cd6ba94f1e492f225f30144e382e81.png](https://i-blog.csdnimg.cn/blog_migrate/5073cdf2404b8d851d58905f7ddf3dcc.png)
![c70aa5b6833e638d016a4b1e91b11d00.png](https://i-blog.csdnimg.cn/blog_migrate/c563bb8ae9a2b11fa4733820236f34ab.png)
- 修改完所有的错误,make -j 编译成功
- make install 安装成功
![197e4866871d3c0353e1b84d745b2007.png](https://i-blog.csdnimg.cn/blog_migrate/7d71349c656996ea6210b7e21d7b31e7.png)
Cd lib
看到所有的库也都编译好了
![760944f342f58ac7de0cc618ce07301f.png](https://i-blog.csdnimg.cn/blog_migrate/5bbb59e5e58565835fa258c30abec0eb.jpeg)
大功告成
5、 测试
![c70aa5b6833e638d016a4b1e91b11d00.png](https://i-blog.csdnimg.cn/blog_migrate/c563bb8ae9a2b11fa4733820236f34ab.png)
编写一个测试demo
- #include <iostream>
#include <stdio.h>
#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat image(200, 200, CV_8UC1);
Image = 255;
imwrite("demo.jpg", image);
Mat im = imread("demo.jpg");
im -=100;
imwrite("demo1.jpg",im);
return 0;
} - 交叉编译:
arm-himix200-linux-g++ -I /home/sansa/opencv-3.4.3/install_hi3516dv300/include -L /home/sansa/opencv-3.4.3/install_hi3516dv300/lib -lopencv_world -lpthread -lrt -ldl -o demo test_opencv.cpp
- 把生成的demo和opencv生成的lib都拷贝进nfs
- 进入面板机系统,执行的demo程序
在执行demo程序之前,首先要添加lib的搜索路径:
Cd lib
export LD_LIBRARY_PATH="$PWD:$LD_LIBRARY_PATH"
./demo
运行成功
我编译好的opencv:
zip文件是官网下载好的源码,没有做任何修改
加压后的文件是我在编译过程中修改好的
![984aa12ae487ec4211123c8e1b02cc57.png](https://i-blog.csdnimg.cn/blog_migrate/5bc316cf31b74a4f30945a2bd8f08c53.png)
链接:https://pan.baidu.com/s/19_WxuMVk3odXbM3dIVzVbQ
提取码:ca7x