环境+工具:

编译器 : aarch64-linux-gnu-g++ aarch64-linux-gnu-gcc

虚拟机 :ubuntu16.04

cmake-gui

cd /usr/local

sudo mkdir opencv

将源码opencv3.4.3 拷贝到此目录下,并新建两个opencv_config, opencv-arm-install文件夹,

cmake-gui

点击configure

Next 如下图填写,compilers,c ,c++选项填写自己要用的交叉编译工具链。Target Root为检查编译工具链所在的路径,根据你的填写,Finish

选择你要安装的路径;我这里是安装在刚刚新建的opencv-arm-install下。以防止将之前在ubuntu下的opencv冲掉,这里我只改了这一个选项,网上有人将动态链接库的选项也去掉了,但是我生成静态链接库执行demo出现问题,所以又选回来了,生成动态链接库,反正这里我只改了这一个地方。

然后点击configure,Generate。

进入opencv_config文件夹下,

执行

make

make install

完成。

中间make的时候我遇到过两个问题:

1.在进度到40%多的时候 opencv-3.4.3/3rdparty/libpng/pngstruct.h:30:18: fatal error: zlib.h: No such file or directory

解决方法

在 opencv-3.4.3/CMakeLists.txt,在514行增加以上代码: ocv_include_directories(./3rdparty/zlib/)下面一行添加,其它类似错误一样的解决方法

......

ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})

ocv_include_directories(./3rdparty/zlib/)

......

重新cmake一遍,然后在进行make

2.

[ 43%] Building CXX object apps/visualisation/CMakeFiles/opencv_visualisation.dir/opencv_visualisation.cpp.obj

[ 43%] Linking CXX executable ../../bin/opencv_annotation

../../lib/libopencv_core.so: undefined reference to `pthread_mutexattr_destroy'

../../lib/libopencv_imgcodecs.so: undefined reference to `pthread_create'

../../lib/libopencv_core.so: undefined reference to `pthread_key_create'

../..lib/libopencv_imgcodecs.so: undefined reference to `png_init_filter_functions_neon'

../../lib/libopencv_core.so: undefined reference to `pthread_getspecific'

../../lib/libopencv_core.so: undefined reference to `dlopen'

../../lib/libopencv_core.so: undefined reference to `pthread_mutex_trylock'

../../lib/libopencv_core.so: undefined reference to `pthread_key_delete'

../../lib/libopencv_core.so: undefined reference to `dlclose'

../../lib/libopencv_core.so: undefined reference to `dlsym'

../../lib/libopencv_core.so: undefined reference to `pthread_mutexattr_settype'

../../lib/libopencv_imgcodecs.so: undefined reference to `pthread_join'

../../lib/libopencv_core.so: undefined reference to `pthread_setspecific'

../../lib/libopencv_core.so: undefined reference to `pthread_mutexattr_init'

collect2: error: ld returned 1 exit status

解决方法:

如下修改:~/opencv-3.4.3/3rdparty/libpng/pngpriv.h文件。

将128行注释掉,添加129行内容。

128 /*# if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \*/

129 # if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \

解决了这两个问题之后就make通过了

之后将编译完成的lib include文件夹拷贝到开发板上,网上说拷贝到开发板的/usr/local,但是我拷贝到这个文件夹下执行demo的时候会出现error while loading shared libraries: libopencv_highgui.so.3.4: cannot open shared object file: No such file or directory这个错误,后将lib文件里的.so文件拷贝到lib64文件夹下demo可正常执行。

编译一个调用摄像头并且录像的demo:

#include

#include

#include

#include

#include

using namespace cv;

using namespace std;

int main()

{

VideoCapture capture(6);//如果是笔记本,0打开的是自带的摄像头,1 打开外接的相机

capture.set(3,640);

capture.set(4,480);

Mat img;

VideoWriter vw; //新建一个多媒体文件

int fps = capture.get(CAP_PROP_FPS); //获取摄像头的帧率

if (fps <= 0)fps = 16;

//设置视频的格式

// vw.open("Video.avi", VideoWriter::fourcc('h', '2', '6', '4'), fps, Size(640, 480));

vw.open("1.avi", VideoWriter::fourcc('M', 'J', 'P', 'G'), fps, Size(640, 480));

if (!capture.isOpened()) //判断摄像头是否打开

{

cout << "open video faild";

getchar();

}

cout << "open video success" << endl;

if (!vw.isOpened()) //判断视频文件是否创建

{

cout << "open vw faild" << endl;

}

cout << "open vw success" << endl;

while (1)

{

capture.read(img); //读取视频帧

if (img.empty())

break;

vw.write(img); //将视频帧写入文件

}

return 0;

}

将lib和include文件拷贝到交叉编译的lib和include的文件夹下。并执行以下命令。

aarch64-linux-gnu-g++ camera.cpp -o camera -I/usr/local/opencv/opencv-arm/include -L/usr/local/opencv/opencv-arm/lib -lopencv_highgui -lopencv_core -lopencv_imgproc -lpthread -lrt -ldl -lopencv_imgcodecs -lopencv_videoio

会出现以下警告:

/usr/local/linaro-aarch64-2017.11-gcc7.2/bin/…/lib/gcc/aarch64-linux-gnu/7.2.1/…/…/…/…/aarch64-linux-gnu/bin/ld: warning: …/…/lib/libopencv_imgproc.so, needed by /home/zy/cv22_1.0_rc/cv22_auto_linux_sdk/ambarella/prebuild/third-party/armv8-a/opencv24/usr/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)

/usr/local/linaro-aarch64-2017.11-gcc7.2/bin/…/lib/gcc/aarch64-linux-gnu/7.2.1/…/…/…/…/aarch64-linux-gnu/bin/ld: warning: …/…/lib/libopencv_core.so, needed by /home/zy/cv22_1.0_rc/cv22_auto_linux_sdk/ambarella/prebuild/third-party/armv8-a/opencv24/usr/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)

这个警告不影响目标代码的生成,但想去掉的话,其实只需要把找不到的库放到路径为/usr/local/arm/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/lib/目录下即可。

rk1808交叉编译opencv_ubuntu16.04交叉编译opencv 移植到rk1808上相关推荐

  1. ubuntu18.04交叉编译移植OpenCV4.70和QT5.12.12至ARM64位平台LKD3588(开发板为ubuntu22.04系统)(三)

    序:前面已经将Opencv和Qt5.12.12分别交叉编译并部署至RK3588中开发板上了,并验证了在开发板上都可以顺利运行.接下来我们在PC虚拟机QT上搭建将二者结合的IDE便于开发. 一.虚拟机中 ...

  2. 四、SLAM学习笔记—— Ubuntu18.04交叉编译OpenCV4.5.5至ARM64位平台firefly-RK3566

    概述: 交叉编译大概的意思是指: 在PC(x86_x64)的机器上编译其他平台如ARM平台的代码,这个过程叫做交叉编译.对于交叉编译,我们首先确定目标平台的架构,RK3566的架构是ARMv8,64位 ...

  3. 基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结(一)

    最近刚刚接触XILINX的ZYNQ板,刚接触没有十天.XILINX定位它为SOC,我也很认同,起码比TI定位MPU为SOC强很多.据说今年TI的最新产品也加入了ZYNQ板. 之前的MIPS处理器设计与 ...

  4. ubuntu 14.04 交叉编译ffmpeg

    因为工作的关系和自己的兴趣原因,我尝试了自己从ubuntu 14.04 交叉编译ffmpeg. 我交叉编译ffmpeg的方法,完全是摸索得到的.在这之前,我从来没有试过交叉编译. 在从ubuntu成功 ...

  5. Ubuntu20.04 交叉编译librtmp

    第一步:编译openssl和zlib 参考链接:https://blog.csdn.net/sz76211822/article/details/127815993?spm=1001.2014.300 ...

  6. TL437x-IDK基于AM437x的OpenCV移植教程

    1基于AM437x的OpenCV移植 表 1 开发板型号 是否支持本实验 TL437x-EVM 支持 TL437x-EasyEVM 支持 TL437x-IDK 支持 TL437xF-EVM 支持 AM ...

  7. opencv 移植到迅为IMX6开发板

    OpenCV 是目前开源项目中最著名的基于机器视觉方向的图像处理的开发包,目前已经有被移植到嵌入式 Linux 环境上.本文介绍了 OpenCV 交叉编译的基本步骤. 一.编译环境及库文件 linux ...

  8. 【Android 内存优化】libjpeg-turbo 函数库交叉编译与使用 ( 交叉编译脚本编写 | 函数库头文件拷贝 | 构建脚本配置 | Android Studio 测试函数库 )

    文章目录 一.交叉编译 Shell 脚本参考 二.NDK r16b 版本配置 三.libjpeg-turbo 交叉编译 Shell 脚本 四.执行 libjpeg-turbo 交叉编译 Shell 脚 ...

  9. 【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )

    文章目录 I . 动态库 与 静态库 II . 编译动态库 III. Android Studio 使用第三方动态库 IV . Android Studio 关键代码 V . 博客资源 I . 动态库 ...

最新文章

  1. Java transient
  2. Centos6.5更换163源 epel源
  3. Python任务调度模块 – APScheduler,Flask-APScheduler实现定时任务
  4. 如何把视频压缩变小?视频压缩方法介绍
  5. java7 异常继承_Java基础7-异常;jar包
  6. Qt官方文档阅读笔记-QStyledItemDelegate Class描述
  7. OAuth2.0资源服务器之校验Token配置
  8. left join嵌套selelct语句格式_SQL Formatting Rule 格式化行业规范
  9. centos7 关闭防火墙的指令_Centos7.3防火墙配置
  10. c语言微信挑一挑编程,100行python代码实现微信跳一跳辅助程序
  11. 【SQL 学习】表连接--natural join 的一个bug
  12. 【图像处理】基于matlab分形插值算法调换图片【含Matlab源码 197期】
  13. MATLAB Simulink 中的过零检测与代数环
  14. linux mint 下安装 wwscan
  15. 五种不同的微博评论数据获取方法
  16. 触摸屏在环卫车辆上装控制系统的应用
  17. 刘彬20000词汇06
  18. PHP绘制正方形印章,php画图实现中文圆形印章
  19. 照片背景底色更换工具二(python+flask网页版源码及打包)
  20. OpenLayers中文文档2栅格重投影

热门文章

  1. 脱胎于沃尔沃的Polestar 2浮出水面,它真能挑战Model 3吗?
  2. 使用新版FLIR (FLIR_ADAS_v2) 训练Faster RCNN模型
  3. 【数据库学习笔记】03 MySQL数据库CURD整理大全
  4. U盘禁止写入/SD卡被禁用怎么解除
  5. 项目管理笔记-第十二章 项目采购管理
  6. 网卡无法再次硬改mac_Intel网卡mac无限硬改工具(IntelMacChanger)
  7. 国产化直播系统建设方案
  8. 电影《小萝莉的猴神大叔》观后感
  9. [Unity]Optimize Your Mobile Game Performance中文版
  10. 一文讲解灰光模块和彩光模块