最近接触图像处理的项目,花了一周时间把OpenCV的移植搞定,现记录下自己的安装过程、出现的错误和解决办法。

环境:ubuntu10.0.4+ eclipse luna + OpenCV2.4.13

1 依赖库的安装

首先安装可能使用到的环境,安装命令如下:

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
安装ffmpeg:

sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next 
sudo apt-get update 
sudo apt-get install ffmpeg
安装之后,查看:

ffmpeg -v
出来很多信息,是安装成功了(不成功会出现not found)。
这里使用cmake来对opencv进行编译,因此先检查cmake、cmake-gui是否安装。
cmake -version
如果已安装,跳过;若没有,执行以下命令:
sudo apt-get install cmake
检查cmake-gui是否安装:

cmake-gui -version
安装命令:
sudo apt-get install cmake-qt-gui

2 OpenCV安装

将OpenCV安装包解压到固定文件夹(opencv版本2.4.13,),进入OpenCV文件夹,执行cmake-gui命令:

sudo cmake-gui
选择源代码目录和build生成的目录

选择需要使用的选项,BUILD_JPEG 、BUILD_PNG,

更改生成安装目录,

点击Configure

点击Generate

然后进入刚才选择的build目录,执行安装命令:

sudo make
sudo make install
即可完成opencv的安装。

安装中出现的错误见:

3 eclipse中配置OpenCV

然后到eclipse的配置,打开eclipse,新建一个C++工程

右键属性,修改两个地方

1、编译时头文件的地址

链接时库的地址(库可以根据用到而添加,不一定要全部加进去,可以加的库在安装目录的lib文件夹里面)

库文件目录根据自己的安装位置输入,找到库文件后再确认目录:

然后,写入示例程序

#include<core.hpp>
#include<highgui.hpp>
#include<imgproc.hpp>
using namespace cv;
int main(void)
{
    Mat pic;
    pic=imread("test.jpg");
    if(pic.empty())return -1;
    imshow("pic",pic);
    waitKey(0);
    return 0;
}
编译,应该能成功,点运行,应该不行,因为还没配置opencv的运行环境,这里编译全都用绝对地址去找,编译和链接应该是没问题的,但是运行的时候会找不到库,这个时候配置opencv环境。

Sudo gedit /etc/ld.so.conf.d/opencv.conf
在空白的文件中加上链接库的地址,本文中的环境:

/usr/local/opencv/lib
使改动生效,输入命令:

sudo ldconfig
然后修改另一个文件,
Sudo gedit /etc/bash.bashrc
在结尾处添加如下内容:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv/lib/pkgconfig
    Export PKG_CONFIG_PATH
路径地址根据根据安装地址改变,保存关闭,将图片放到工程目录下点运行,程序就运行起来。

4、嵌入式OpenCV移植

类似上一章节教程,进入opencv源码文件夹,使用cmake-gui命令,选择源和编译后放的地方:

点Configture,选择第四个,Next

Operating System填arm-linux,C和C++工具选择安装的交叉编译,用绝对地址,Target Root选工具的地址,Finish

选上BUILD_JPEG和BUILD_PNG,修改安装地址(同上节)。

修改CMakeCache.txt文件:

cd opencv-arm/
    sudo gedit CMakeCache.txt
大约200行,找到
CMAKE_EXE_LINKER_FLAGS:STRING=' '
改为

CMAKE_EXE_LINKER_FLAGS:STRING='-lpthread -lrt -ldl'
回到opencv-arm目录

sudo make
sudo make install
完成安装,make过程中可能出现的错误:
1、

/usr/local/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.7.3/../../../../arm-linux-gnueabihf/bin/ld: ../../3rdparty/lib/libzlib.a(crc32.obj): relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
../../3rdparty/lib/libzlib.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
modules/core/CMakeFiles/opencv_core.dir/build.make:586: recipe for target 'lib/libopencv_core.so' failed
make[2]: *** [lib/libopencv_core.so] Error 1
CMakeFiles/Makefile2:460: recipe for target 'modules/core/CMakeFiles/opencv_core.dir/all' failed
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2
Makefile:116: recipe for target 'all' failed
make: *** [all] Error 2
解决办法:将3rdparty/zlib/CMakeFiles/zlib.dir/flags.make内的C_FLAGS =  -W -Wall 为 C_FLAGS =  -fPIC  -W -Wall,同时将所有类似路径下(3rdparty/***/CMakeFiles/***.dir/flags.make)的flag.make文件内的C_FLAGS全部改过来。
2

Linking CXX static library ../../lib/libopencv_haartraining_engine.a
[ 80%] Built target opencv_haartraining_engine
Scanning dependencies of target opencv_createsamples
[ 80%] Building CXX object modules/haartraining/CMakeFiles/opencv_createsamples.dir/createsamples.o
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libopencv_highgui.so.2.2.0: undefined reference to `cvCreateCameraCapture_V4L(int)'
collect2: ld returned 1 exit status
make[2]: *** [bin/opencv_createsamples] Error 1
make[1]: *** [modules/haartraining/CMakeFiles/opencv_createsamples.dir/all] Error 2
make: *** [all] Error 2
解决办法:将opencv版本从3.2.0换成了,2.4.13就OK啦,没太深究其中原因。

eclipse配置OpenCV,使用交叉编译工具

安装成功后要配置eclipse,设置编译工具和opencv头文件地址:

选择检查编译工具:

选择include路径:

添加库文件及路径:

设置好后编辑代码,然后编译

#include <iostream>
using namespace std;
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <core_c.h>
//#include <opencv2\opencv.hpp>
using namespace cv;
 
int main() {
    
    Mat pic;
    pic = imread("test.jpg");
    if(pic.empty())return -1;
    Mat gray_image;
    cvtColor(pic,gray_image,CV_BGR2GRAY);
    imwrite("gray.jpg",gray_image);
    return 0;
}
编译中可能出现的错误:
1找不到cv.h

解决办法:包含路径不对,重新检查。

2.找不到core_c.h

解决办法:将所有库文件复制交叉编译工具链下的lib文件夹下(问题可以解决,不明白为什么)

3.运行时,识别不到opencv的库文件

解决办法:更新交叉编译工具链,或者降低opencv的版本。本文使用后者,将opencv3.0.0版本换成2.4.13后有效。

imx6上运行

编译成功后,生成arm可运行的文件。然后将/usr/local/arm/opencv/lib中的库文件复制到开发板中的/lib文件夹,将生成的可执行文件复制与图片到arm板统一目录下,给予可执行权限,即可运行。因为使用的嵌入式板子不带屏幕,因此使用的是将一个彩色图片转换成灰度图像程序,程序运行后复制到虚拟机查看,如下图。

过程可能出现位置错误,耐心寻找原因,不着急就能解决,祝看到这篇文章的人好运。

参考:http://blog.csdn.net/u012354697/article/details/50670715

http://blog.csdn.net/zdyueguanyun/article/details/51322295

原文:https://blog.csdn.net/yiyongzhifu/article/details/60571364 
参考:https://blog.csdn.net/lang523493505/article/details/85272672

参考:https://blog.csdn.net/sx1503198/article/details/51777877

参考:https://wenda.so.com/q/1535002564215155

OpenCV在IMX6上的移植相关推荐

  1. OpenCV在ARM上的移植

    OpenCV在ARM上的移植 与X86 Linux类似,请参考: Linux 下编译安装OpenCV 本文在此基础上进行进一步操作. 网络上很多移植编译的方法比较老,多数针对OpenCV 1.0,而且 ...

  2. 【Linux开发】OpenCV在ARM-linux上的移植过程遇到的问题1---cvNamedWindow调用报错的问题...

    问题描述: 这个实际上是最后一部的问题,将生成的共享库文件放入到了/usr/local/opencv-arm/lib下,并且设置了LD_LIBRARY_PATH中为/usr/local/opencv- ...

  3. OpenCV在G-API上移植各向异性图像分割

    OpenCV在G-API上移植各向异性图像分割 在G-API上移植各向异性图像分割 介绍 快速入门:使用OpenCV后端 检查calcGST() 运行G-API图 G-API初始版本:完整列表 检查初 ...

  4. 在arm linux mini2440上移植ntp服务,RTEMS 4.9.5 在 QEMU MINI2440 上的移植发布啦……

    (本文原创,转载请注明出处,谢谢) 这两天抽了个空,在rickleaf移植的 qemu mini2440 的rtems 4.9.5 bsp 上做了一些修改: 1.原来mini2440的 bsp是基于 ...

  5. OpenCV在图像上画线、矩形、椭圆、多边形、填充的多边形、圆、显示文字

    OpenCV在图像上随机画直线.椭圆.多边形.圆.显示文字 代码如下: /*** @file Drawing_2.cpp* @brief Simple sample code*/#include &l ...

  6. 使用Python和OpenCV检测图片上的条形码

    这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问题,浏览代码之后,我提供了一些对原始算法的更新和改进. 首先需 ...

  7. u-boot-2009.08在2440上的移植详解(三)

    一.移植环境 主  机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2.tgz u-b ...

  8. OpenCV在水平线上校准3个摄像机的实例(附完整源代码)

    OpenCV在水平线上校准3个摄像机的实例 OpenCV在水平线上校准3个摄像机的实例 OpenCV在水平线上校准3个摄像机的实例 #include "opencv2/calib3d.hpp ...

  9. OpenCV在图像上添加边框borders

    OpenCV在图像上添加边框borders 在图像上添加边框borders 目标 理论 代码 解释 声明变量 载入图片 创建一个窗口 初始化参数 环形loop 颜色随机 在图像周围形成边框 结果 在图 ...

最新文章

  1. 面试必问的16个经典问题的回答思路
  2. python流程控制-Python | 流程控制
  3. C#(WinForm) + MySQL的中文编码问题(MySQL中文编码的终极解决方案)
  4. Ajax:异步js和xml
  5. python求两数之和的命令_python计算两个数的百分比方法
  6. SpringMVC中接收数据和返回数据
  7. linux+模块与设备关系,linux内核设计与实现读书笔记——设备和模块
  8. 拓端tecdat|R语言提取时间序列的周期性成分应用EMD,小波滤波器,Baxter过滤器等
  9. ubuntu下安装配置java8
  10. OPPO R15刷root获取magisk权限 一键root R15系列
  11. DirectX11学习笔记01
  12. 读大学,大学四年培养的思维与工作能力,(读研,读博)
  13. 小规模纳税人可以申请美元账户收款么?
  14. 飞蛾投火式的瞬间灿烂
  15. 第 6章 图——数据结构
  16. 从书中学爬虫靠谱吗?深夜读《爬虫实战 从数据到产品》
  17. 不想多挣钱的程序员都有罪!!!
  18. #1001. 求梯形的面积
  19. 零基础如何学网络安全?
  20. 感《明朝后期的中缅战争》

热门文章

  1. IST-5-非对称加密之DH
  2. mysql 三元,三元运算符
  3. 数据结构之Bitmap
  4. C语言测量程序运行时间
  5. translate-102-principle
  6. 我国疫苗监管体系通过世卫组织新一轮评估
  7. Gala 打算建立 Play、Listen、Watch2Earn 的Web3娱乐帝国
  8. Excel中IF函数判断时间或特殊字符,以固定日期为准是否超过该日期
  9. 云手机显示服务器尚未收据,天健云HIS解决方案(24页)-原创力文档
  10. PS图像合成之人物裂痕效果