Zedboardwebcam设计问题篇(三)-OpenCV+QT配置显示图片

首先,我们需要OpenCV的编译安装,由于我是参照《嵌入式系统软硬件协同设计实战指南》做的,编译安装和移植过程不再介绍,这里推荐一个:http://blog.csdn.net/noodies/article/details/5798434

不过这篇文章用的平台和我不一样,过程差不多。就是交叉编译工具不一样,我用的是arm-xilinx-linux-的交叉编译工具。

使用如下命令编译你的程序,这条命令挺长,不过很好理解,-I后面分别时头文件位置,-L后面是库文件位置,以及列出的用到的库文件

arm-xilinx-linux-gnueabi-g++ -I/home/jiong/cmake/include/opencv -I/home/jiong/cmake/include -L/home/jiong/cmake/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann ./face_detection_arm.c -o ./edge_detection_arm.o

对face_detection_arm.c进行了编译测试,生成edge_detection_arm.o,并在Zedboard上运行:./edge_detection_arm.o ./lena.bmp ./lenatest.bmp

#include "cv.h"

#include "highgui.h"

IplImage* doCanny(
    IplImage* in,
    double lowThresh,
    double highThresh,
    double aperture)

{

    if(in->nChannels!=1)

    return(0);

    IplImage* out = cvCreateImage(

            cvGetSize(in),

            in->depth,

            1);

    cvCanny(in,out,lowThresh,highThresh,aperture);

    return(out);

};

int main(int argc, char** argv)

{

    IplImage* img_rgb = cvLoadImage(argv[1]);

    IplImage* img_gry = cvCreateImage(cvSize(img_rgb->width,img_rgb->height),img_rgb->depth,1);

    cvCvtColor(img_rgb,img_gry,CV_BGR2GRAY);

    IplImage* img_cny = doCanny(img_gry,10,100,3);

    if(cvSaveImage(argv[2],img_cny,0)!=0)

    printf("Save Image Successful\n");

    cvReleaseImage(&img_rgb);

    cvReleaseImage(&img_gry);

    cvReleaseImage(&img_cny);

    return 0;

}

结果如下:

这是一个边缘检测的例子。

下面主要着重实现基于OpenCV的视频采集和显示

 http://www.cnblogs.com/s_agapo/archive/2011/11/24/2262346.html,我事先查找了资料,

由于之前已经分别交叉编译安装过OpenCV和Qt了,现在就直接进行OpenCV和Qt结合的配置

还是参考上面的博客,在我编译安装的qt下找到qmake.conf,我的路径是:/usr/local/Trolltech/QtEmbedded-4.8.0-arm/mkspecs/qws/linux-arm-gnueabi-g++

里面找到qmake.conf,因为我的QT的project都是用/usr/local/Trolltech/QtEmbedded-4.8.0-arm/bin文件下的qmake来编译的。

编辑该文件:

QMAKE_INCDIR = /home/jiong/cmake/include/opencv
QMAKE_LIBS = -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann
INCLUDEPATH += /home/jiong/cmake/include/opencv
LIBS += /home/jiong/cmake/lib/libopencv_core.so \
/home/jiong/cmake/lib/libopencv_imgproc.so \
/home/jiong/cmake/lib/libopencv_highgui.so \
/home/jiong/cmake/lib/libopencv_ml.so \
/home/jiong/cmake/lib/libopencv_video.so \
/home/jiong/cmake/lib/libopencv_features2d.so \
/home/jiong/cmake/lib/libopencv_calib3d.so \
/home/jiong/cmake/lib/libopencv_objdetect.so \
/home/jiong/cmake/lib/libopencv_contrib.so \
/home/jiong/cmake/lib/libopencv_legacy.so \
/home/jiong/cmake/lib/libopencv_flann.so \
一步一步来吧,先来实现图片显示

http://www.cnblogs.com/emouse/archive/2013/03/29/2988717.html

参照这篇博客来做了第一个例子,但是,程序贴上,进行编译时,出现了各种问题:

错误:QT QWidget: No such file or 。。。。。。。

opencv2找不到等等,总之,不是头文件找不到,就是库文件找不到。差点就重新编译Qt了,可是现在想想,跟Qt有什么关系啊。

然后就是慢慢找原因,首先从Qt的设置里面分析,一个是QT版本,一个是交叉编译路径,然后就是qmake,全部重新设置一遍。

结果还是一样出现问题,不过主要时OpenCV的问题了,然后回头去找OpenCV的编译过程,发现OpenCV在ccmake中有一个选项:WITH_QT,以及WITH_QT_OPENGL,之前没用到,所以都是OFF

把它们打开,继续试,还是OpenCV库文件没找到,不光时这,QT的一系列头文件也找不到了。

因为之前按照那个帖子配置QT的,在qmake.conf中进行配置的,我把配置的命令全删了,QT的头文件都找到了,我想可能是这个配置引起的问题。

百度后,发现可以在工程。pro中进行配置,所以把配置命令全部放到了.pro中。索性把QT路径也配置了一遍。

测试,终于通过了。放到Zedboard上,运行,成功了,这个例子是通过一个按钮打开目录中的图片文件。里面用到了OpenCV的库函数。

posted on 2013-04-09 16:06  reboot69  阅读(767)  评论(1编辑  收藏  举报

导航