Opencv3.2移植到arm板

ARM 108浏览

注:博客中有些图片部分为了省事,借用了别人博客的图片,相关部分注意事项相同。若有侵权,请联系删除!

一,Opencv3.2移植到arm

Opencv3.2

ubuntu16.04

目标板:飞凌嵌入式iMx6-ul

前一:把opencv源码,/modules/highgui/src/windows.cpp  文件第583行和654行注释掉!!!非常重要!!! 

  583 行: CV_NO_GUI_ERROR("cvshowImage")

  654行:CV_NO_GUI_ERROR("cvWaitKey")  

不然程序运行时会提示如下让先安装gtk+2.x之类的错误。应该是没有显示屏显示的原因。

  “OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvNamedWindow”

1,配置交叉编译环境,见imx6-ul软件手册

2,在源码目录下打开终端  /cmake-gui      // 启动cmake

在cmake界面中进行配置  

第一步:

第二步:

第三步:

1),下图为网上流传非常广泛的配置方法:在这个配置中填写的目标系统的名称会导致opencv库中V4L无法使用(因为在本次工程中没有使用opencv的V4L驱动库,可以忽略),应该为“Linux”

2),注意编译器的选择为交叉编译器,与下图中的区别。

3),target root 注意事项与下图相同

第四步:

1),建议使用静态库编译,选择动态库编译需要把动态库拷贝到arm板中,比较麻烦。

 

第五步:

4.按照上述配置完成后,进入编译文件目录(进入自己配置的目录)

然后执行 make 进行编译

 

鉴于网上的参考教程,大多数人这里会报错,这里将错误总结如下:

(1)报错:

Linking CXX executable ../../bin/opencv_test_calib3d

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

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

....................

collect2: ld returned 1 exit status

make[2]: *** [bin/opencv_test_calib3d] Error 1

make[1]: ***[modules/calib3d/CMakeFiles/opencv_test_calib3d.dir/all] Error 2

make: *** [all] Error 2

 

或者

报错:undefined reference  to  “dlopen”

     undefined  reference  to  “dlysm”

解决方案:修改上图中“编译文件目录”目录下的CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,保险起见,加上-lpthread -lrt -ldl,如下图:

5.报错按照上述方法解决,再make后,执行sudo make install ,此时编译好的库就按照在你指定的目录下了.

NOTE: 如果sudo make install 出现 Cmakeerror at apps/annotation/cmake_install.cmake:42(FILE):之类的错误,直接打开文文件 apps/annotation/cmake_install.cmake把42行注释掉。

  (一共有3个类似错误,对应三个文件,我这是都在第42行,都注释掉)

6.进入上述的安装库,若没有取消BUILD_SHARED_LI选项,则生产的是.so后缀的库文件,将这些库文件拷贝到板子的/lib目录下。

二,工程代码编译

7.在Ubuntu上编译的时候,建议使用CMakeList.txt 通过cmake编译

  因为需要交叉编译,配置方法如下:

  

 

配置完makefile之后,直接make生成可执行文件,如果opencv为静态库,可执行文件拷贝至板子中即可运行。

8.CMakeLists.txt编译方式;

  1), Linux下undefined reference to ‘pthread_create’’pthread _join’问题

 在自己的工程目录下的CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS,加上-lpthread -lrt –ldl。

 

9,若电脑中装有多个版本的opencv,使用指定的OPENCV版本

   在CMakeLists.txt文件中设置opencv文件夹路径

 

在cmake-gui中指定路径