原文:https://blog.csdn.net/Guet_Kite/article/details/78667175?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!

接下来就是下载opencv了: 
下载地址:http://blog.csdn.net/yanzi1225627/article/details/47668021

下载好之后解压:unzip opencv-2.4.11.zip
cd opencv-2.4.11.zip
建两个文件夹来存放配置和安装路径:
sudo mkdir /usr/local/opencv/install_opencv -d
sudo mkdir /usr/local/opencv/config_opencv -d

然后用cmake配置:
sudo cmake-gui

在where is the source code:里写上opencv的源文件路径 
在where to build the binaries:里面写上作为cmake编译arm版本的工作目录 
然后点击configure

这里generator保持为Unix Makefiles,然后选择第四个选项:Specify options for cross-compiling 
最后点击Next

这里Targeting System选的是Linux(之前我选的是arm-linux,有点坑,选这个没有V4L支持),
接着就是选择工具链了,我用的是友善的4.4.3的工具链,Compliers写的是交叉编译工具 arm-linux-gcc、arm-linux-g++
Target Root写的是交叉编译工具 arm-linux-g++/gcc 的所在包含文件夹
最后点击 Finish即可

然后中间红色的配置里:
取消WITH_GTK
取消WITH_TIFF
选择WITH_QT
GTK配置比较麻烦,我Ubuntu之前就配置好有QT了,所以我们取消掉,直接用QT最GUI。如果没有配置有QT,那还是不选吧。
最后点击Configure,会发现有错误:Error in configuration process,project files may be invalid
CMake Warning at cmake/OpenCVFindLibsGUI.cmake:18 (find_package):
By not providing “FindQt5Core.cmake” in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by “Qt5Core”, but
CMake did not find one.

Could not find a package configuration file provided by “Qt5Core” with any
of the following names:
Qt5CoreConfig.cmake
qt5core-config.cmake
第一个是一个warning,不管,下一个是error,说的是”Qt5Core”没找到。
我的QT安装路径是:/work/qt/my_qt/
所以直接把/work/qt/my_qt/lib/cmake/Qt5Core 填到Qt5Core_DIR选项即可,
同理,底下几个选项也要填上,Qt5Gui_DIR、Qt5Test_DIR等…….

最后点击Configure无误后,点击Generate按钮就会在/usr/local/opencv/install_opencv目录生成Makefile

cd /usr/local/opencv/config_opencv
修改安装opencv的路径:
sudo vi CMakeCache.txt
找到:CMAKE_INSTALL_PREFIX:PATH=/usr/local
修改为:CMAKE_INSTALL_PREFIX:PATH=/usr/local/opencv/install_opencv
这是我自己的安装路径。

接着sudo make编译
最后把/usr/local/opencv/install_opencv/lib下文件移植到开发板根文件lib下

好了,我们测试下: 
从网上找到一个测试例子,然后修改下,test.cpp:

  1. #include <cv.h>
  2. #include <cxcore.h>
  3. #include <highgui.h>
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. int main(int argc, char **argv)
  9. {
  10. CvCapture* capture = NULL;
  11. IplImage* frame = NULL;
  12. if(!(capture = cvCaptureFromCAM())) {
  13. cout<<"Can not open camera.\n"<<endl;
  14. return -;
  15. }
  16. cvNamedWindow("video", );
  17. while(frame = cvQueryFrame( capture )){
  18. cvShowImage("video",frame);
  19. cout<<"have capture\n"<<endl;
  20. }
  21.  
  22. cout<<"no have capture\n"<<endl;
  23. cvDestroyWindow("video");
  24. cvReleaseCapture(&capture);
  25. return ;
  26. }

编译:

  1. arm-linux-g++ -I/usr/local/opencv/install_opencv/include/opencv/ -L/usr/local/opencv/install_opencv/lib/ -lcv -lcxcore -lhighgui -lpthread -lrt -o test test.cpp

出现: 
test.cpp:21: note: the mangling of ‘va_list’ has changed in GCC 4.4 
在GCC 4.4里,’va_list’已经被改变了,所以我们编译时,要加上 -Wno-psabi选项:

  1. arm-linux-g++ -Wno-psabi -I/usr/local/opencv/install_opencv/include/opencv/ -L/usr/local/opencv/install_opencv/lib/ -lcv -lcxcore -lhighgui -lpthread -lrt -o test test.cpp

那么,这样可以了吗?
不行!出现:
/usr/local/arm/opt/FriendlyARM/toolschain/4.4.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.3/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lcv
collect2: ld returned 1 exit status
这里提示lcv找不到,为什么呢?
还是我之前说的,网上的文章都是几年前的了,好老了。
打开我们opencv的lib可以看下,根本没有这些个库了,

所以提示自然找不到,所以要改成我们现在opencv的库:

  1. arm-linux-g++ -Wno-psabi -I/usr/local/opencv/install_opencv/include/opencv/ -L/usr/local/opencv/install_opencv/lib/ -lopencv_core -lopencv_highgui -lpthread -lrt -o test test.cpp

出现两个warning:
/usr/local/arm/opt/FriendlyARM/toolschain/4.4.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_imgproc.so, needed by /usr/local/opencv/lib_opencv/lib//libopencv_highgui.so, not found (try using -rpath or -rpath-link)
/usr/local/arm/opt/FriendlyARM/toolschain/4.4.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_core.so, needed by /usr/local/opencv/lib_opencv/lib//libopencv_highgui.so, not found (try using -rpath or -rpath-link)

将需要到的那三个.so文件:libopencv_core.so libopencv_highgui.so libopencv_imgproc.so将这些库复制到编译器的lib中:

  1. sudo cp -d *libopencv_core* *libopencv_highgui* *libopencv_imgproc* /usr/local/arm/opt/FriendlyARM/toolschain/4.4./arm-none-linux-gnueabi/lib

以上借用风筝大神博客

本人编译使用命令

  1. arm-cortex_a8-linux-gnueabi-g++ -Wno-psabi -I/usr/local/opencv/install_opencv/include/opencv/ -L/usr/local/opencv/install_opencv/lib/ -lopencv_core -lopencv_highgui -lpthread -lrt -o video1 video1.cpp

然后把编译出来的test文件放到开发板上执行。

测试二:

  1. #include<opencv2/core/core.hpp>
  2. #include<opencv2/highgui/highgui.hpp>
  3. #include<iostream>
  4.  
  5. using namespace cv;
  6. using namespace std;
  7.  
  8. int main( )
  9. {
  10. //载入图片
  11. Mat image= imread("girl.jpg");
  12. Mat logo= imread("fly.jpg");
  13. //定义一个Mat类型,用于存放,图像的ROI
  14. Mat imageROI;
  15.  
  16. imageROI= image(Rect(,,logo.cols,logo.rows));//定义一个左上角点坐标为(_x, _y)的cols*rows矩形窗口
  17.  
  18. //将logo加到原图
  19. //参数:图、权重、图、权重、添加的常数项、输出图
  20. addWeighted(imageROI,0.5,logo,0.3,.,imageROI);
  21.  
  22. cout << "start add picture......\n" << endl;
  23. //输出一张jpg图片到工程目录下
  24. imwrite("fly_girl.jpg",image);
  25.  
  26. waitKey();
  27.  
  28. return ;
  29. }

Makefile:

  1. CC = arm-linux-g++
  2. LFLAGS = -Wno-psabi
  3. LIBS = -L/usr/local/opencv/install_opencv/lib/ -L/work/qt/my_qt/lib
  4. CPPFLAGS = -lQt5Widgets -lQt5Gui -lQt5Core -lpthread -lopencv_core -lopencv_highgui -lpthread -lrt
  5. LINC += -I/usr/local/opencv/install_opencv/include/opencv/
  6. objs := open
  7. out := open
  8.  
  9. $(out):$(objs).cpp
  10. ${CC} ${LFLAGS} ${LIBS} ${LINC} ${CPPFLAGS} -o $@ $^
  11.  
  12. clean:
  13. rm $(out)

这是girl.jpg图:

这是fly.jpg图:

这是使用opencv合成的效果图:

opencv移植(二)的更多相关文章

  1. 开发环境配置--Ubuntu+Qt4+OpenCV(二)

    同系列文章 1. 开发环境配置--Ubuntu+Qt4+OpenCV(一) 2. 开发环境配置--Ubuntu+Qt4+OpenCV(二) 3. 开发环境配置--Ubuntu+Qt4+OpenCV(三 ...

  2. 使用OpenCV查找二值图中最大连通区域

    http://blog.csdn.net/shaoxiaohu1/article/details/40272875 使用OpenCV查找二值图中最大连通区域 标签: OpenCVfindCoutour ...

  3. opencv 移植

    1.ubunut系统搭建opencv+python开发环境 1.1.ubuntu系统安装pip3工具 sudo apt-get install python3-pip //安装python模块安装工具 ...

  4. zedboard OPENCV移植

    1:系统环境搭建 要准备好交叉编译环境 见http://blog.csdn.net/xiabodan/article/details/22717175 2:下载cmake CMake是一个跨平台的安装 ...

  5. 【转】OpenCV 移植学习--EMCV

    在Opencv论坛有好些这方面的帖子,主要看了一下几个牛人的帖子,比如论坛管理员于博士Shiqi Yu:(EMCV:可在DSP上运行的OpenCV)http://www.opencv.org.cn/f ...

  6. Android平台下OpenCV移植与使用---基于C/C++

    在<Android Studio增加NDK代码编译支持--Mac环境>和<Mac平台下Opencv开发环境搭建>两篇文章中,介绍了如何使用NDK环境和Opencv环境搭建与测试 ...

  7. ubuntu OPENCV移植

    Installing OpenCV 2.4.1 in Ubuntu 12.04 LTS 这是转载国外一篇文章  移植PC上的OPENCV  http://www.samontab.com/web/20 ...

  8. ok6410 u-boot-2012.04.01移植二修改源码支持单板

    继ok6410 u-boot-2012.04.01移植一后修改代码,对ok6410单板初始化,主要包括时钟.串口.NAND.DDR等初始化.这些工作在以前的裸板程序都写了,直接拿来用.我觉得先写裸板程 ...

  9. OpenCV教程二 - Mat对象与它各种用法

    学习OpenCV大家都会遇到一个对象叫做Mat,此对象非常神奇,支持各种操作.很多初学者因此被搞得头晕脑胀,它各种用法太多太杂,搞得初学者应接不暇,感觉有心无力.无处下手之感.这里我们首先要正本清源, ...

随机推荐

  1. SQL Server ->> 利用CONVERT/STR/FORMAT函数把浮点型数据格式化/转换成字符串

    在SQL Server下想把数字(包括浮点型和整型)转换成字符串,保留数据原本的样子或者根据需要转换成另外指定的格式可能就不仅仅是一条CAST(XXXX AS NVARCHAR)这么简单的事情了. 无 ...

  2. 【Leetcode】【Medium】Search a 2D Matrix

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  3. CSV 文件读写

    转自:http://www.cnblogs.com/Clin/archive/2013/03/14/2959022.html public class CSVFileHelper { /// < ...

  4. ZT 3.1 依赖倒置原则的定义

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码http://www.mscenter.edu.cn/blog/k_eckelP58 Template 模式获得一种反向控制结构效果,这也是 ...

  5. jemter 使用if控制器,选择需要的内容

    背景:需要根据人员传入的变量,来选择运行的环境,调用不同的参数,进行拼接,使用到if控制器 取到的数据,调用的就是test1的数据

  6. spring的声明式的事物管理和编程事务管理的区别

    一.Spring对编程式事务的支持 Spring中的事务分为物理事务和逻辑事务: 物理事务:就是底层数据库提供的事务支持,如JDBC或JTA提供的事务: 逻辑事务:是Spring管理的事务,不同于物理 ...

  7. swift菜鸟入门视频教程-02-基本运算符

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mengxiangyue/article/details/32435435 本人自己录制的swift菜 ...

  8. javascript中的回调函数(callback) (转载)

    代码如下: app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(er ...

  9. ESlint 语法检测配置说明

    部分vue-cli脚手架创建的默认eslint规则: 代码末尾不能加分号 ; 代码中不能存在多行空行 tab键不能使用,必须换成两个空格 代码中不能存在声明了但未使用的变量 关闭eslint 这里只说 ...

  10. Ajax跨域问题及解决方案

    目录 复现Ajax跨域问题 Ajax跨域介绍 Ajax跨域解决方案 一. 在服务端添加响应头Access-Control-Allow-Origin 二. 使用JSONP解决 小结 复现Ajax跨域问题 ...