【ZYNQ-7000开发之二】QT+OpenCV的边缘检测测试
2015-11-28 22:56
851 查看
在本篇文章中,将实现在Xilinx ZYNQ上用QT+OpenCV实现显示图像,将使用OpenCV上的边缘检测算法进行演示。
本文所使用的开发板是Miz702(兼容zedboard)
PC 开发环境版本:Ubuntu12.04 32bit Qt:4.7.0 OpenCV:2.4.9
环境配置参考 rainysky 博客 http://www.eefocus.com/sj229335457/blog/cate_14065_0.html
zynq运行环境:精简版的ramdisk Linux文件系统
待处理的图像,美女lena
把生成的可执行文件和图片(目前仅支持bmp,很郁闷...,很不完美)拷到SD卡里,上电,打开串口终端输入以下命令
//运行程序
./edge_detec -qws
效果如图所示,上图是在ZYNQ上运行的,下图是在PC上运行的。左侧是原图,右侧是进行canny运算的结果。
下一步,研究下在桌面版的ubuntu上直接用OpenCV显示以及用HLS实现图像处理算法加速。
更多关于zynq开发相关的文章和问题请点击: http://www.osrc.cn/forum.php?mod=forumdisplay&fid=292 http://blog.csdn.net/rzjmpb
本文所使用的开发板是Miz702(兼容zedboard)
PC 开发环境版本:Ubuntu12.04 32bit Qt:4.7.0 OpenCV:2.4.9
环境配置参考 rainysky 博客 http://www.eefocus.com/sj229335457/blog/cate_14065_0.html
zynq运行环境:精简版的ramdisk Linux文件系统
一、准备工作
本次试验需要在PC版的Linux上配置好交叉编译、qt库、opencv库等等,这些配置网上的资料已经不少了,本文将不再叙述。二、要实现的目标
理想的效果是,只使用OpenCV,用imread读入图像,imshow显示图像,但是试了一些方法,发现,zynq上运行 imshow会出错,目前的解决方案是,把imshow要显示的图像,转化成QT上的QImage格式,显示在QLable上。待处理的图像,美女lena
三、部分代码如下
TEMPLATE = app TARGET = DEPENDPATH += . INCLUDEPATH += . # Input HEADERS += mainwidget.h FORMS += mainwidget.ui SOURCES += main.cpp mainwidget.cpp INCLUDEPATH += /usr/local/include \ /usr/local/include/opencv \ /usr/local/include/opencv2 LIBS += /usr/local/lib/libopencv_highgui.so \ /usr/local/lib/libopencv_core.so \ /usr/local/lib/libopencv_imgproc.so #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QWidget> #include <QPushButton> #include <QLabel> #include <QImage> #include <iostream> #include <opencv2/imgproc/imgproc_c.h> #include <opencv2/legacy/legacy.hpp> #include <opencv2/highgui/highgui.hpp> namespace Ui { class MainWidget; } class MainWidget : public QWidget { Q_OBJECT public: explicit MainWidget(QWidget *parent = 0); QPushButton *btn; QLabel *srcPicLabel; QLabel *dstPicLabel; QImage *Qimg_pic; ~MainWidget(); public slots: void slot_imgshow(); private: Ui::MainWidget *ui; }; #include "mainwidget.h" #include "ui_mainwidget.h" using namespace cv; MainWidget::MainWidget(QWidget *parent) : QWidget(parent), ui(new Ui::MainWidget) { ui->setupUi(this); btn = new QPushButton("edge_detection",this); connect(btn,SIGNAL(clicked()),this,SLOT(slot_imgshow())); srcPicLabel = new QLabel(this); dstPicLabel = new QLabel(this); } void MainWidget::slot_imgshow() { Mat src = imread("lena.bmp"); Mat dst; Mat src_gry; // imshow("src",src); cvtColor(src, src_gry ,CV_BGR2GRAY); Canny(src_gry,dst,10,150,3); // imshow("dst",dst); cvtColor(src,src,CV_BGR2RGB); // cvtColor(dst,dst,CV_8UC1); QImage Qimg_pic_src; QImage Qimg_pic_dst; Qimg_pic_src = QImage((const unsigned char*)(src.data),src.cols,src.rows,QImage::Format_RGB888); srcPicLabel->setPixmap(QPixmap::fromImage(Qimg_pic_src)); srcPicLabel->resize(srcPicLabel->pixmap()->size()); Qimg_pic_dst = QImage((const unsigned char*)(dst.data),dst.cols,dst.rows,QImage::Format_Indexed8); dstPicLabel->setGeometry(600,0,320,240); dstPicLabel->setPixmap(QPixmap::fromImage(Qimg_pic_dst)); dstPicLabel->resize(dstPicLabel->pixmap()->size()); } MainWidget::~MainWidget() { delete ui; } #endif // MAINWIDGET_H
四、测试
测试步骤:把生成的可执行文件和图片(目前仅支持bmp,很郁闷...,很不完美)拷到SD卡里,上电,打开串口终端输入以下命令
//建立qt库的目录(要和PC版的目录一样) mkdir /opt/zedboard mkdir /opt/zedboard/qt mkdir /opt/zedboard/qt/install //建立opencv目录(可以和PC不一样,原因:尚不清楚) mkdir /usr/local mkdir /usr/local/lib //挂载SD卡 opencv库 和QT库 mount /dev/mmcblk0p1 /mnt mount /mnt/opencv_lib.img /usr/ mount /mnt/qt_lib.img /opt/zedboard/qt/install/ //设置环境变量 export LD_LIBRARY_PATH=/usr/
//运行程序
./edge_detec -qws
效果如图所示,上图是在ZYNQ上运行的,下图是在PC上运行的。左侧是原图,右侧是进行canny运算的结果。
五、结果以及存在问题
在PC上运行的结果不正确,而zynq上是正确的,至少看起来是这样的,并且PC版的每次运行背景都不同,原因不明。下一步,研究下在桌面版的ubuntu上直接用OpenCV显示以及用HLS实现图像处理算法加速。
更多关于zynq开发相关的文章和问题请点击: http://www.osrc.cn/forum.php?mod=forumdisplay&fid=292 http://blog.csdn.net/rzjmpb
相关文章推荐
- QT中QPainterPath类的功能和使用方法
- Qt大神的博客链接
- Qt 简介--Qt 类简介专题(一)
- Qt QWidget 类简介--Qt 类简介专题(三)
- ubuntu 14.04 下编译QT程序出错误:can't find -lGL error
- qt.pro相关注意点
- Qt5.5文档翻译---Model/View programming
- qt5.5.1 如何判断某个对象是否属于qt类中实例
- qt5程序头文件包含风格推荐
- Qt的时钟Example
- QT实现电子表digitalclock
- QT学习 之 事件与事件过滤器
- QT子窗口及停靠实现
- QT笔记(1)--QT编程环境搭建
- ubuntu Qt版本无效: qmake不存在或者不可执行
- Qt:正则表达式语法:
- QT:QBitArray
- Qt中moc问题(qt moc 处理 cpp)
- QVariant类的使用注意事项
- Qt中通过控件在Label标签中显示一张静态图片