OpenCV在IMX6上的移植
最近接触图像处理的项目,花了一周时间把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上的移植相关推荐
- OpenCV在ARM上的移植
OpenCV在ARM上的移植 与X86 Linux类似,请参考: Linux 下编译安装OpenCV 本文在此基础上进行进一步操作. 网络上很多移植编译的方法比较老,多数针对OpenCV 1.0,而且 ...
- 【Linux开发】OpenCV在ARM-linux上的移植过程遇到的问题1---cvNamedWindow调用报错的问题...
问题描述: 这个实际上是最后一部的问题,将生成的共享库文件放入到了/usr/local/opencv-arm/lib下,并且设置了LD_LIBRARY_PATH中为/usr/local/opencv- ...
- OpenCV在G-API上移植各向异性图像分割
OpenCV在G-API上移植各向异性图像分割 在G-API上移植各向异性图像分割 介绍 快速入门:使用OpenCV后端 检查calcGST() 运行G-API图 G-API初始版本:完整列表 检查初 ...
- 在arm linux mini2440上移植ntp服务,RTEMS 4.9.5 在 QEMU MINI2440 上的移植发布啦……
(本文原创,转载请注明出处,谢谢) 这两天抽了个空,在rickleaf移植的 qemu mini2440 的rtems 4.9.5 bsp 上做了一些修改: 1.原来mini2440的 bsp是基于 ...
- OpenCV在图像上画线、矩形、椭圆、多边形、填充的多边形、圆、显示文字
OpenCV在图像上随机画直线.椭圆.多边形.圆.显示文字 代码如下: /*** @file Drawing_2.cpp* @brief Simple sample code*/#include &l ...
- 使用Python和OpenCV检测图片上的条形码
这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问题,浏览代码之后,我提供了一些对原始算法的更新和改进. 首先需 ...
- 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 ...
- OpenCV在水平线上校准3个摄像机的实例(附完整源代码)
OpenCV在水平线上校准3个摄像机的实例 OpenCV在水平线上校准3个摄像机的实例 OpenCV在水平线上校准3个摄像机的实例 #include "opencv2/calib3d.hpp ...
- OpenCV在图像上添加边框borders
OpenCV在图像上添加边框borders 在图像上添加边框borders 目标 理论 代码 解释 声明变量 载入图片 创建一个窗口 初始化参数 环形loop 颜色随机 在图像周围形成边框 结果 在图 ...
最新文章
- 面试必问的16个经典问题的回答思路
- python流程控制-Python | 流程控制
- C#(WinForm) + MySQL的中文编码问题(MySQL中文编码的终极解决方案)
- Ajax:异步js和xml
- python求两数之和的命令_python计算两个数的百分比方法
- SpringMVC中接收数据和返回数据
- linux+模块与设备关系,linux内核设计与实现读书笔记——设备和模块
- 拓端tecdat|R语言提取时间序列的周期性成分应用EMD,小波滤波器,Baxter过滤器等
- ubuntu下安装配置java8
- OPPO R15刷root获取magisk权限 一键root R15系列
- DirectX11学习笔记01
- 读大学,大学四年培养的思维与工作能力,(读研,读博)
- 小规模纳税人可以申请美元账户收款么?
- 飞蛾投火式的瞬间灿烂
- 第 6章 图——数据结构
- 从书中学爬虫靠谱吗?深夜读《爬虫实战 从数据到产品》
- 不想多挣钱的程序员都有罪!!!
- #1001. 求梯形的面积
- 零基础如何学网络安全?
- 感《明朝后期的中缅战争》