Opencv交叉编译到ARM(基于Qt)

*:前提是Qt交叉编译已经完成,并能正常使用。

1.下载Opencv2.2.0并解压,在解压后的目录下新建一个release目录。

2.安装cmake和cmake-gui。

3.执行命令:cmake-gui

错误提示和解决:

Issue 2. ImportError: No module named sphinx:

Just copy the following line, then this problem disappear.

yum install python-sphinx

Issue 3. ImportError: No module named numpy.distutils

yum install numpy.i686

4.设置源码路径和编译后文件的保存路径。

5.点configure,设置交叉编译工具:

*!:注意:1只能写Linux ,不能写linux或者arm-linux
。不然就算编译通过了,在ARM板子上运行会提示:./opencv0:error while loading shared libraries: ../../lib/libopencv_core.so: cannot openshared object file: No such file or directory

2填写交叉编译arm-linux-的安装路径

3.一定要选择:Search in Target Root
。否者,编译到59%左右肯定会报错:

/usr/include/bits/mathinline.h:675:3: error: unknown register name ‘st‘ in ‘asm‘

/usr/include/bits/mathinline.h:675:3: error: unknown register name ‘st‘ in ‘asm‘

/usr/include/bits/mathinline.h:675:3: error: unknown register name ‘st‘ in ‘asm‘

6.CMAKE_BUILD_TYPE填Release ;

取消WITH-TH-GTK

取消WITH-TIFF

选择WITH-QT

选择WITH-QTOPENGL

7.再次点configure

8.没有提示错误的话,点Generate
,生产Makefile。

9.进到编译后文件的保存路径,修改CMakeCache.txt:

CMAKE_EXE_LINKER_FLAGS:STRING=‘-lpthread-lrt‘

10.执行make

11.错误和解决:

(1),79%报错:

../home/xin/tiaozhansai/OpenCV-2.2.0/modules/ml/src/gbt.cpp:474:error: ‘expl‘ was not declared in this scope

修改gbt.cpp中14行,16行:注释掉

//#if ANDROID

#define expl(x) exp(x)

//#endif

错误消除。

(2)83%

libQtGui.so.4, needed by../../lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)
出现这个错误

是因为交叉编译器没有找到 qt
库拷贝过去(注意要把所有*.so.4文件拷贝过去)

cp/opt/EmbedSky/qt-4.7-arm/lib/*.so.4/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/lib/

(4),96%报错:

CMakeFiles/opencv_test.dir/src/highguitest.obj:In function `CV_HighGuiTest::run(int)‘:

highguitest.cpp:(.text._ZN14CV_HighGuiTest3runEi+0x18):warning: the use of `tmpnam‘ is dangerous, better use `mkstemp‘

../../lib/libopencv_features2d.so:undefined reference to `cv::SIFT::SIFT(double, bool, bool, int, int, int, int)‘

解决方法:在OpenCV2.2.0/modules/features2d/src/sift.cpp下

#ifdef __arm__

#define ARM_NO_SIFT

#endif

注释掉#define ARM_NO_SIFT.错误消除,

成功!

#make install

在安装文件夹下生成bin、lib、include三个目录(我的是/usr/local/lib ,

/usr/local/include/opencv ,/usr/local/include/opencv
, /usr/local/include/bin)

把lib拷到ARM板对应的目录下(大概有12M左右)。

然后创建:/etc/ld.so.conf

加入:includeld.so.conf.d/*.conf

保存,然后执行: echo"/usr/local/lib" >> /etc/ld.so.conf

再执行:ldconfig

12.测试:新建一个空的Qt工程opencv0

添加一个c++源文件。

修改工程文件:

SOURCES += \

opencv0.cpp

LIBS+= /usr/local/lib/libopencv_calib3d.so\

/usr/local/lib/libopencv_contrib.so \

/usr/local/lib/libopencv_core.so \

/usr/local/lib/libopencv_features2d.so \

/usr/local/lib/libopencv_flann.so \

/usr/local/lib/libopencv_gpu.so \

/usr/local/lib/libopencv_highgui.so \

/usr/local/lib/libopencv_imgproc.so \

/usr/local/lib/libopencv_legacy.so \

/usr/local/lib/libopencv_ml.so \

/usr/local/lib/libopencv_objdetect.so \

/usr/local/lib/libopencv_video.so

INCLUDEPATH+=include/opencv\

include/opencv2\

include

源文件为:

#include"cv.h"

#include"cxcore.h"

#include"highgui.h"

int main(int argc,char*argv[])

{

IplImage *pImg;//声明IplImage指针

pImg=cvLoadImage("/home/SMARTHOME/bin/1.png",1);//载入图片

cvNamedWindow("Image",1);//创建窗口

cvShowImage("Image",pImg);//显示图像

cvWaitKey(0);//等待按键

cvDestroyWindow("Image");//销毁窗口

cvReleaseImage(&pImg);//释放图像

return 0;

}

这里测试的是opencv1的接口。也可以自己写opencv2的,基于Mat类的图像显示。

13.将Ot编译后的elf文件拷到开发板。并执行。

报错:OpenCV Error:Unspecified error (The function is not implemented. Rebuild the library withWindows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, installlibgtk2.0-dev and pkg-config,
then re-run cmake or configure script) incvNamedWindow, file /home/zhw123/software/OpenCV-2.2.0/modules/highgui/src/window.cpp,line 274

terminate called after throwing an instanceof ‘cv::Exception‘

what(): /home/zhw123/software/OpenCV-2.2.0/modules/highgui/src/window.cpp:274:error: (-2) The function is not implemented. Rebuild the library with Windows,GTK+ 2.x or Carbon support. If you are on Ubuntu
or Debian, installlibgtk2.0-dev and pkg-config, then re-run cmake or configure script in functioncvNamedWindow

Aborted

14.因为ARM板子上没有GTK的库,所以不能用highgui的窗口创建等函数。程序改写为使用Qt窗口部件类。

创建一个简单的Qt应用程序,继承自Qwidget。然后改写构造函数:

#include "widget.h"

#include "ui_widget.h"

#include <QPixmap>

#include "widget.h"

#include <opencv2/core/core.hpp>

#include<opencv2/highgui/highgui.hpp>

#include<opencv2/imgproc/imgproc.hpp>

using namespace cv;

Widget::Widget(QWidget *parent) :

QWidget(parent),

ui(new Ui::Widget)

{

ui->setupUi(this);

Mat srcImage1= imread("/home/SMARTHOME/bin/1.png");//加载图片

Mat rgbImage;

cvtColor(srcImage1,rgbImage,CV_BGR2RGB);//转换颜色空间

QImage img=QImage((const unsigned char *)(rgbImage.data),rgbImage.cols,

rgbImage.rows,rgbImage.cols*rgbImage.channels(),QImage::Format_RGB888);//创建QImage对象

ui->label->setPixmap(QPixmap(QPixmap::fromImage(img)));

ui->label->resize(ui->label->pixmap()->size());

ui->label->move(0,0);

}

Widget::~Widget()

{

delete ui;

}

编译,然后下载到板子,把图片放到elf文件同级目录,执行命令:./opencv0 -qws

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 06:51:09

Opencv交叉编译到ARM(基于Qt)的相关文章

基于QT和OpenCV的人脸识别系统

1 系统方案设计 1.1 引言 人脸是一个常见而复杂的视觉模式,人脸所反映的视觉信息在人与人的交流和交往中有着重 要的作用和意义,对人脸进行处理和分析在视频监控.出入口控制.视频会议以及人机交互等领 域都有着广泛的应用前景,因此是模式识别和计算机视觉领域持续的研究热点. 本系统在 FriendlyARM Tiny6410 开发板基础上,利用 OpenCV 计算机视觉库和 QT 图形库,通 过普通的 USB 摄像头实现了自动人脸识别,准确率较高,方便易用. 1.2 系统总体架构 "人脸识别&quo

windows平台下基于QT和OpenCV搭建图像处理平台

在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并且生成了相应的免费视频.这篇博客的主要内容,就是基于最新版本的相应工具,在windows平台下,"基于QT和OpenCV搭建图像处理平台",并且进一步研究如何基于QT所见即所得的便利,进行图像处理操作,最终还要和vs做一个比较,进行初步小结. 主要分为3个部分,一个是当前模式下,windows+Q

基于QT开发的第三方库

基于Qt开发的第三方库 分类: Qt2014-02-12 11:34 1738人阅读 评论(0) 收藏 举报 QT第三方库 目录(?)[+] 文章来源:http://blog.csdn.net/zhgn2/article/details/14613519 QxOrm QxOrm is a new open source ORM (Object Relational Mapping) C++ library designed to provide : * Persistence (based on

ARM Linux Qt 5.x.x 无标题栏

/********************************************************************************* * ARM Linux Qt 5.x.x 无标题栏 * 说明: * 以前Qt 4.x.x版本是直接有标题栏,但现在的Qt 5.x.x没有了标题栏,从参考文章里 * 可以看出,是需要另外移植窗口管理器的. * * 2017-1-6 深圳 南山平山村 曾剑锋 ***************************************

基于QT的一个简易的安防

工程描述 opencv2.4.8 QT5 背景建模后,当有异物入侵时,把入侵的帧写到视频文件 使用BackgroundSubtractorMOG2背景建模 程序基于QT对话框 .pro #------------------------------------------------- # # Project created by QtCreator 2014-06-19T16:00:40# #------------------------------------------------- Q

一种基于Qt的可伸缩的全异步C/S架构服务器实现(流浪小狗,六篇,附下载地址)

本文向大家介绍一种基于Qt的伸缩TCP服务实现.该实现针对C/S客户端-服务集群应用需求而搭建.连接监听.数据传输.数据处理均在独立的线程池中进行,根据特定任务不同,可安排负责监听.传输.处理的线程数目,从而在高传输负荷.高计算符合上达成取舍.数据处理采用流水线结构,以避免少量客户的密集计算请求影响其他客户端的处理.本文对应的代码符合LGPL协议,可直接从https://github.com/goldenhawking/zpserver下载. 也可从http://download.csdn.ne

一种基于Qt的可伸缩的全异步C/S架构服务器实现(一) 综述

本文向大家介绍一种基于Qt的伸缩TCP服务实现.该实现针对C/S客户端-服务集群应用需求而搭建.连接监听.数据传输.数据处理均在独立的线程池中进行,根据特定任务不同,可安排负责监听.传输.处理的线程数目,从而在高传输负荷.高计算符合上达成取舍.数据处理采用流水线结构,以避免少量客户的密集计算请求影响其他客户端的处理.本文对应的代码符合LGPL协议,可直接从https://github.com/goldenhawking/zpserver下载. 也可从http://download.csdn.ne

Lumina将是基于 Qt工具箱,旨在取代KDE成为PC-BSD默认的桌面环境

Lumina Desktop 1.1.0 发布了,该版本是重要更新,包括全新的以及完全重新编写的utilities,并对底层基础架构进行改进. Lumina将是基于 Qt工具箱,旨在取代KDE成为PC-BSD默认的桌面环境.现阶段 Lumina被认为尚处于早期alpha状态,但已被PC-BSD的软件包仓库收录,它的目标是成为一个轻量级的.稳定而快速的桌面环境. http://www.oschina.net/news/78293/lumina-desktop-1-1-0

基于Qt有限状态机人工智能的一种实现及改进方法

基于Qt有限状态机人工智能的一种实现及改进方法 人工智能在今年是一个非常火的方向,当然了,不仅仅是今年,它一直火了很多年,有关人工智能的一些算法层出不穷.人工智能在很多领域都有应用,就拿我熟悉的游戏领域来说吧,一些寻路算法,比如说A*算法(我的<十日驱鬼记>就曾经使用了A*算法进行寻路),还有一些高级的算法,比如说决策树等,都在游戏中得以了广泛的应用.我目前想制作的项目和人工智能也有一定的关系,因此,我这个月开始学习搭建一些简单的人工智能框架. 蒋彩阳原创文章,首发地址:http://blog