首先,我们需要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的库函数。