这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » QT+OpenCV的边缘检测测试

共1条 1/1 1 跳转至

QT+OpenCV的边缘检测测试

菜鸟
2017-06-28 14:25:43     打赏
在本篇文章中,将实现在Xilinx ZYNQ上用QT+OpenCV实现显示图像,将使用OpenCV上的边缘检测算法进行演示。

本文所使用的开发板是Miz702(兼容zedboard)
PC 开发环境版本:Ubuntu12.04  32bit   Qt:4.7.0  OpenCV:2.4.9  
环境配置参考 rainysky 博客 http://www.****.com/sj229335457/blog/cate_14065_0.html


zynq运行环境:精简版的ramdisk Linux文件系统
一、准备工作本次试验需要在PC版的Linux上配置好交叉编译、qt库、opencv库等等,这些配置网上的资料已经不少了,本文将不再叙述。
二、要实现的目标理想的效果是,只使用OpenCV,用imread读入图像,imshow显示图像,但是试了一些方法,发现,zynq上运行 imshow会出错,目前的解决方案是,把imshow要显示的图像,转化成QT上的QImage格式,显示在QLable上。
待处理的图像,美女lena



三、部分代码如下[cpp] view plain copy


  • 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卡里,上电,打开串口终端输入以下命令

[plain] view plain copy


  • //建立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实现图像处理算法加速。


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]