15458|15

5979

帖子

8

TA的资源

版主

楼主
 

【转载】arm-linux下qt + opencv开发环境的搭建(Altera DE1 Soc) [复制链接]

 
 
原文地址:http://blog.sina.com.cn/s/blog_94f416f00102uybc.html

百度云盘地址:
链接已隐藏,如需查看请登录或者注册

系统:              ubuntu-14.04-desktop-i386
ARM 系统:    DE1_SoC_FB
虚拟机工具:      VMware-workstation-full-10.0.1
opencv:           2.4.7
qt:                    qt-linux-opensource-5.2.0-x86offline.run
交叉编译器:    gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux
cmake:             2.8.12.2


一.准备工作:
1.安装虚拟机的步骤无需多言,装完后记得重启;
2.            $sudo apt-get update  
                $sudo apt-get upgrade
3.安装x86的工具链
                $sudo apt-get install build-essential libgl1-mesa-dev

二. 配置交叉编译器
       我云盘中提供的是gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux.tar.bz2,版本为4.7.3
       cd到相应目录
       $tar xjf gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux.tar.bz2
       修改PATH
       $gedit ~/.profile
       在文件末尾加上
       export PATH=/home/yulebron/gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux/bin:$PATH
       一定要根据你的安装目录修改路径(下同)
        保存退出后$source ~/.profile


三.安装QT
1.下载QT
       http://download.qt-project.org/official_releases/qt/5.2/5.2.0/ 选择qt-linux-opensource-5.2.0-x86offline.run (也可以下载我云盘中提供的,下同)
2.安装
       进入相应目录
       $chmod +x qt-linux-opensource-5.2.0-x86-offline.run
       $./qt-linux-opensource-5.2.0-x86-offline.run
    一路next,安装完毕
3.构建QT的ARM库
       下载地址:http://qt-project.org/downloads 选择Qt libraries 4.8.6 for embedded Linux
        cd到相应目录,解压
        $tar -zxvf qt-everywhere-opensource-src-4.8.5.tar.gz
4.为ARM创建mkspecs
        cd到qt-everywhere-opensource-src-4.8.5/mkspecs/qws 目录下
        以下步骤根据自己的编译器名称进行修改!!!
重命名编译器linux-arm-gnueabi-g++
        $cp -r linux-arm-gnueabi-g++ linux-arm-gnueabihf-g++
        修改配置
        $cd linux-arm-gnueabihf-g++
        $gedit qmake.conf
        将所有的arm-none-linux-gnueabi用linux-arm-gnueabihf替换,如图


         
        安装QT库
        $source ~/.profile
        $cd ~/Downloads/qt-everywhere-opensource-src-4.8.6
        $ ./configure -prefix /usr/local/qt-4.8.6-altera-soc -release -shared -nomake examples -nomake tools -nomake docs -make demos -xplatform qws/linux-arm-gnueabihf-g++ -embedded arm -little-endian -no-pch -v
        弹出选项中选择o,随后选择yes

        $make
        $sudo make install
        注意make这一步会跑数小时
5.QT中设置ARM的开发套件
        选择Tools—Options ...

        
编译器路径为之前安装的编译器中的g++(注意图中是4.8.5,我们用的是4.8.6)



Kits Setup :

        Name: Altera SoC FPGA Kit
        Device Type: Select “Generic Linux Device”
        Compiler: Select “GCC (Altera SoC)”
        Qt Version: Select “(Qt 4.8.6 (qt-4.8.6-atera-soc)”



以后的编程中如下选择即可生成ARM上可用的可执行文件,在相应文件夹中找到然后拷到ARM中即可


5.拷贝QT库到ARM上
        $ cd /usr/local
        $sudo tar -jcv -f qt-4.8.6-altera-soc.tar.bz2 qt-4.8.6-altera-soc
        将生成的的压缩文件拷贝到ARM的相应目录下解压即可

四.安装opencv的准备
1.安装Synaptic Package Manager
2.启动Synaptic
        $sudo synaptic
        依次点击Reload, Mark All Upgrades, Apply
3.安装zlib,png,jpeg
        在搜索栏中输入png,mark libpng 12-0 为安装,点击apply,如图



同上,输入jpeg, 安装jpeg62

          输入zlib, 安装zlib1g
          输入cmake, 安装cmake, cmake-qt-gui

五.安装opencv
下载opencv源码,并解压,新建一个文件夹用来包含创建编译opencv库时候的配置文件(/home/yulebron/work/opencvARM),另外在在/usr/local中创建一个opencvARM文件夹
        $cmake-gui

        


此时会报错,因为默认勾选了一下未安装的选项,此处,我在with中只会留下with_jpeg和with_png



修改CMAKE_INSTALL_PREFIX为你将安装的目录,即为/usr/local/opencvARM

一切ok, 点击generate
进入/home/yulebron/work/opencvARM
        $vim CMakeCache.txt
修改   CMAKE_C_FLAGS:STRING=-fPIC
          CMAKE_EXE_LINKER_FLAGS:STRING=-pthread -lrt
保存并退出
        $make
        $sudo make install
将生成的/usr/local/opencvARM/lib中的文件拷贝到ARM的相应目录中

六.QT中包含opencv库
在.pro文件中添加如下语句,由于对opencv的库不是很了解,我将所有的库都包含了进去
INCLUDEPATH += /usr/local/opencvARM/include/opencv \
               /usr/local/opencvARM/include/opencv2 \
               /usr/local/opencvARM/include

LIBS += /usr/local/opencvARM/lib/libopencv_calib3d.so \
        /usr/local/opencvARM/lib/libopencv_contrib.so \
        /usr/local/opencvARM/lib/libopencv_core.so \
        /usr/local/opencvARM/lib/libopencv_features2d.so \
        /usr/local/opencvARM/lib/libopencv_flann.so \
        /usr/local/opencvARM/lib/libopencv_gpu.so \
        /usr/local/opencvARM/lib/libopencv_highgui.so \
        /usr/local/opencvARM/lib/libopencv_imgproc.so \
        /usr/local/opencvARM/lib/libopencv_legacy.so \
        /usr/local/opencvARM/lib/libopencv_ml.so \
        /usr/local/opencvARM/lib/libopencv_nonfree.so \
        /usr/local/opencvARM/lib/libopencv_objdetect.so \
        /usr/local/opencvARM/lib/libopencv_photo.so \
        /usr/local/opencvARM/lib/libopencv_stitching.so \
        /usr/local/opencvARM/lib/libopencv_superres.so \
        /usr/local/opencvARM/lib/libopencv_video.so \
        /usr/local/opencvARM/lib/libopencv_videostab.so

至此,一切工作已经完成

七.编程测试
此处感谢CSDN博主   心中唯有此愿  的博文http://blog.csdn.net/jiebaoabcabc/article/details/22935185
     整个工程见云盘build-thatsit-Altera_SoC_FPGA_Kit-Release 目录
1.新建swith.cpp, 复制上IplImage与QImage间转换用代码(这个非常有用)
  • #include "switch.h"
  • ImageCVtoQT::ImageCVtoQT(IplImage *_srcImage)
  •     :srcImage(_srcImage)
  • {
  •     assert(srcImage != NULL);
  •     width = srcImage -> width;
  •     height = srcImage -> height;
  •     channel = srcImage -> nChannels;
  • }
  • ImageCVtoQT::~ImageCVtoQT()
  • {
  •     cvReleaseImage(&srcImage);
  • }
  • const QImage ImageCVtoQT::getQtImage()
  • {
  •     QImage desImage = QImage(width, height, QImage::Format_RGB32);
  •     for(int i=0; i
  •     {
  •         for(int j=0;j
  •         {
  •             int r,g,b;
  •             if(RGB_TYPE == channel)
  •             {
  •                 b = (int)CV_IMAGE_ELEM(srcImage, uchar , i, j*3+0);
  •                 g = (int)CV_IMAGE_ELEM(srcImage, uchar , i, j*3+1);
  •                 r = (int)CV_IMAGE_ELEM(srcImage, uchar , i, j*3+2);
  •             }
  •             else if(GRAY_TYPE == channel)
  •             {
  •                 b = (int)CV_IMAGE_ELEM(srcImage, uchar, i, j);
  •                 g = b;
  •                 r = b;
  •             }
  •             desImage.setPixel(j, i, qRgb(r, g, b));
  •         }
  •     }
  •     return desImage;
  • }
  • /////////////////////////////////////////////////////////////////////
  • ImageQTtoCV::ImageQTtoCV(QImage _srcImage)
  • :srcImage(_srcImage)
  • {
  •     assert(!srcImage.isNull());
  •     width=srcImage.width();
  •     height=srcImage.height();
  • }
  • ImageQTtoCV::~ImageQTtoCV()
  • {
  • }
  • IplImage *ImageQTtoCV::getCvImage()
  • {
  •     IplImage *desImage=cvCreateImage(cvSize(width,height),8,3);
  •     for(int i=0;i
  •     {
  •         for(int j=0;j
  •         {
  •             QRgb rgb=srcImage.pixel(j,i);
  •             CV_IMAGE_ELEM(desImage,uchar,i,j*3+0)=qBlue(rgb);
  •             CV_IMAGE_ELEM(desImage,uchar,i,j*3+1)=qGreen(rgb);
  •             CV_IMAGE_ELEM(desImage,uchar,i,j*3+2)=qRed(rgb);
  •         }
  •     }
  •     return desImage;
  • }


2.新建switch.h头文件
  • #ifndef SWITCH_H
  • #define SWITCH_H
  • //#include "highgui.h"
  • #include "cv.h"
  • #include "cxcore.h"
  • #include
  • #define RGB_TYPE  3
  • #define GRAY_TYPE 1
  • class ImageCVtoQT
  • {
  • public:
  •     ImageCVtoQT(IplImage *_srcImage);
  •     ~ImageCVtoQT();
  •     const QImage getQtImage(void);
  • private:
  •     IplImage *srcImage;
  •     //QImage desImage;
  •     int width;
  •     int height;
  •     int channel;
  • };
  • class ImageQTtoCV
  • {
  • public:
  •     ImageQTtoCV(QImage _srcImage);
  •     ~ImageQTtoCV();
  •     IplImage *getCvImage(void);
  • private:
  •     QImage srcImage;
  •     int width;
  •     int height;
  •     //int channel;
  • };
  • #endif // SWITCH_H

3.在界面文件中拉入一个lable,将其展开与窗体同大小
4.在dialog的构造函数中进行图像的导入和转换,过程是QImage导入图片-> 原始IplImage->opencv对原始IplImage进行处理->处理后IplImage->QImage->使用QImage借助qt窗体上显示图片
5.dialog.cpp
  • #include "dialog.h"
  • #include "ui_dialog.h"
  • #include "switch.h"
  • #include "QtGui"
  • Dialog::Dialog(QWidget *parent) :
  •     QDialog(parent),
  •     ui(new Ui::Dialog)
  • {
  •     ui->setupUi(this);
  •     //声明IplImage指针
  •     IplImage *pImg = NULL;
  •     QImage *qImg = new QImage;
  •     //载入图片
  •     if(!(qImg->load("/home/project/sao22.bmp")))  // 我的开发板支持bmp格式,小心路径
  •     {
  •         return;
  •     }
  •     //switch
  •     ImageQTtoCV qtc(*qImg);
  •     pImg = qtc.getCvImage();
  •     if(!pImg)
  •         return;
  •     IplImage *pGrayImg = NULL;
  •     pGrayImg = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
  •     cvCvtColor(pImg, pGrayImg, CV_BGR2GRAY);
  •     ImageCVtoQT ctq(pGrayImg);
  •     *qImg = ctq.getQtImage();
  •     if(!qImg)
  •         return;
  •     ui->label->setPixmap(QPixmap::fromImage(*qImg));
  • }
  • Dialog::~Dialog()
  • {
  •     delete ui;
  • }
从一切完成,从Release目录中拷贝相应的elf文件和即可在开发板上运行,miao..........





本文参考:
http://blog.csdn.net/jiebaoabcabc/article/details/22935185
terasic文档DE1-SoC_Control_Panel.pdf

此帖出自Altera SoC论坛

最新回复

请问,最后编程测试的完整工程,在哪可以看到??谢谢  详情 回复 发表于 2016-11-23 11:20

赞赏

1

查看全部赞赏

点赞 关注(2)
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 

回复
举报

36

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
收藏了好好学习
此帖出自Altera SoC论坛
 
 
 

回复

1173

帖子

3

TA的资源

五彩晶圆(初级)

板凳
 
图片挂啦,
此帖出自Altera SoC论坛
 
 
 

回复

474

帖子

2

TA的资源

纯净的硅(初级)

4
 
图挂了~~~~~
此帖出自Altera SoC论坛
 
 
 

回复

2万

帖子

74

TA的资源

管理员

5
 
依照楼主链接给完善了,大家可以放心浏览。

以后传图片时,请尽量上传至EEworld,因为新浪 qq的图片等都是不允许外链的。
此帖出自Altera SoC论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(中级)

6
 
请问有人照着这个做下来了么?求问“安装QT库”这一步时
$make
$sudo make install
这里出现错误。错误描述
make[1]:linux-arm-gnueabihf-g++:命令未找到。
在下一步中对应路径中的qmake文件也没有。
请问有没有人遇到相似的问题?
此帖出自Altera SoC论坛
 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(中级)

7
 


提示界面如上图
此帖出自Altera SoC论坛
 
 
 

回复

1891

帖子

2

TA的资源

纯净的硅(中级)

8
 
相见恨晚。。。
有时间去实践一下。。。
此帖出自Altera SoC论坛
个人签名
分享铸就美好未来。。。




 
 
 

回复

6

帖子

1

TA的资源

一粒金砂(初级)

9
 
学习了,试一下。
此帖出自Altera SoC论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

10
 

你好,这个问题你是怎么解决的?
此帖出自Altera SoC论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(中级)

11
 
很不错的 ,有时间实践一下
此帖出自Altera SoC论坛
个人签名坚持坚持再坚持。
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

12
 
fantianchen 发表于 2016-6-7 19:43
你好,这个问题你是怎么解决的?

把gcc交叉编译器添加到环境变量
此帖出自Altera SoC论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

13
 
fantianchen 发表于 2016-6-7 19:43
你好,这个问题你是怎么解决的?

把gcc交叉编译器添加到环境变量
此帖出自Altera SoC论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

14
 
你好,在编译opencv时,make的时候出现recipe for 'lib/libopencv_highgui.so'failed。请问是什么问题啊?
此帖出自Altera SoC论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

15
 

你好,你现在这个问题解决了吗?我也是遇到了这个问题额,环境变量也添加了,貌似好像还是没什么用啊
此帖出自Altera SoC论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

16
 
请问,最后编程测试的完整工程,在哪可以看到??谢谢
此帖出自Altera SoC论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表