OpenCV移植到ARM开发板

0.事前准备

0.1 github上获取opencv和opencv_contrib源码(不用扩展包可以不下)
0.2 安装cmake-gui pkg-config
0.3 建立好交叉编译环境gcc&g++
本文是以没有安装其他文章如Reference[1][2][3]中的各种前置依赖情况下进行的 暂时未出现意外

1.用Cmake配置OpenCV

1.1cmake配置勾选请参考[3]中的配置
1.2cmake配置一定要勾选generate pkg config
1.3 点击configure 完成后点击generate
1.4 打开生成文件的位置arm_build
  在CMakeCache.txt中找到
CMAKE_EXE_LINKER_FLAGS:STRING=
  加上-pthread -ldl -lrt保存
1.5 回到cmake 重新reload cache 然后configure&generate

2.编译&安装&配置&移植

2.1 进入arm_build/ 执行sudo make [-j2]

-j4会编译得更快,如果你有八核,就开-j8

2.2 完成后执行sudo make install
2.3 把安装路径中的lib/pkgconfig下的opencv4.pc移动到/usr/lib/pkgconfig
2.3.1 用pkg-config --libs --cflags opencv4验证是否成功
成功则能够输出相关链接信息

  • e.g
-I/home/zxdd/Desktop/OpenCV/sources/arm_install/include/opencv4/opencv 
-I/home/zxdd/Desktop/OpenCV/sources/arm_install/include/opencv4 
-L/home/zxdd/Desktop/OpenCV/sources/arm_install/lib -lopencv_dnn -lopencv_gapi 
-lopencv_highgui -lopencv_ml -lopencv_objdetect -lopencv_photo 
-lopencv_stitching -lopencv_video -lopencv_calib3d -lopencv_features2d -lopencv_flann
-lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core

2.4 配置库路径
sudo gedit /etc/ld.so.conf
添加安装文件的lib路径

  • e.g. /home/zxdd/Desktop/OpenCV/sources/arm_install/lib
    sudo ldconfig 更新配置

关于ldconfig请移步linux ldconfig命令,环境变量文件配置详解

2.5 把安装文件夹下的lib中的.so文件放到开发板的/usr/lib/路径下并更改权限

3.验证

此处验证的demo如下,把一张图片转换为灰度图像并保存为tout.png,成功后则会输出yyyyy…

#include 
#include 
#include 

using namespace cv;	    //OpenCV标准库

int main(int argc, char* argv[])
{
	Mat src = imread("/avter.png");

	//判断一下,看是否读取到图片
	if (src.empty())
	{
		std::printf("could not load image... \n");
		return -1;
	}
	
	Mat out;
	cvtColor(src, out, CV_BGR2GRAY);
	imwrite("/tout.png", out);
	std::printf("yyyyy... \n");

	return 0;
}

3.1 交叉编译验证
arm-linux-gnueabi-g++ test.cpp -o demo `pkg-config --libs --cflags opencv4`
编译通过即可
3.2 开发板验证
把编译出的demo放到开发板上运行,
能够在/目录下生成文件则验证成功

4.遇到的问题

关于路径请根据自身情况更改!![4]

4.1 XXX.so文件缺失相关:error while loading shared libraries: libXX.so: cannot open shared object file: No such file or directory

解: 从交叉编译工具的lib中把相应的动态链接文件放到开发板上的/usr/lib中

4.2 GLIBC版本不匹配:libm.so.6: version `GLIBC_2.27 not found;libstdc++.so.6: version`CXXABI_1.3.11’ not found (required by /usr/lib/libopencv_core.so.4.2)等

解: 从交叉编译工具的lib中把相应的动态链接文件放到开发板上的/lib中

Reference

[1]【Ubuntu 环境配置】(1)Ubuntu安装opencv-4.1.0+opencv_contrib-4.1.0(c++,py2,py3 皆可运行)https://blog.csdn.net/u011897411/article/details/89743448

[2] Ubuntu18上交叉编译树莓派3B+ opencv4.10 (非常详细) 第一章-交叉编译
https://blog.csdn.net/tajon1226/article/details/100606316

[3] Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9 https://blog.csdn.net/ajianyingxiaoqinghan/article/details/70194392

[4]Linux 里有/lib和/usr/lib各个目录含义
https://blog.csdn.net/sweetfather/article/details/79625482

你可能感兴趣的:(嵌入式,OpenCV,opencv,linux,ubuntu,arm)