• 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的库函数。

  • 相关阅读:
    springboot运行时该注意的地方
    建立第一个SpringBoot小列子(碰到的错误)
    mysql建表基本语法
    两层c:forEach循环嵌套
    git-------基础知识(本地推送项目版本---github上)
    《生活的邀请函》___ 奥雷阿
    输入路径(包括盘符),打印层级目录(隐藏文件也会打印出来)
    输入两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
    用java实现歌曲串烧高速版(SequenceInputStream的使用)
    Java中InputStream装饰器模式的大家族
  • 原文地址:https://www.cnblogs.com/preorder69/p/3007067.html
Copyright © 2020-2023  润新知