在 Qt 程序中使用OpenCV是本文要介绍的内容,OpenCV是一个基于BSD许可证授权(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。[
OpenCV安装
关于OpenCV的安装,参考:
http://opencv.willowgarage.com/wiki/InstallGuide
安装文档写得无比详细, 这里就不赘述了。 简单来说就是安装CMake,然后用cmake命令去配置和编译。
最简单的命令是 “cmake .”。 这一步应该不算一帆风顺, 笔者遇到了gstreamer头文件找不到的问题。 在OpenCV的代码里搜索一番没找到gstreamer的头文件目录在哪里配置, 而笔者对cmake又非常不熟悉, 只好用了个土方法, 在/usr/include下给本机的gstreamer目录建了个link到OpenCV使用的gstreamer路径。 OpenCV使用的gstreamer路径在生成的Makefile里提到了, 是/usr/include/gstreamer-0.10, 这个路径是从哪儿得到的这一点很神奇…谁要是知道的请不吝赐教啊。 笔者电脑中的路径则为/usr/inlcude/gstreamer-0.10-a, 故建立链接如下:
- ln -s /usr/include/gstreamer-0.10-a /usr/include/gstreamer-0.10
代码例子
OpenCV里带了很多的sample, 在samples目录下, 其中一个引起了笔者的注意, 那就是samples/cpp/Qt_sample。 简单看了看代码, OpenCV里已经实现了和Qt的集成, 里面用Qt的API写了widget,可以直接把摄像头取得的内容显示在Qt的widget里。
但这个例子工程似乎并没有做好, 编译过程实在是太曲折了, 到目前还没找到方法编译成功, 报的错误是undefined reference。 第一个遇到的问题是默认的编译选项不会去编译samples目录, 为了寻找合适的编译选项颇费了点脑筋(因为笔者对cmake基本上可以说是一窍不通的…汗)。 尝试单独编译samples目录, 失败了, 报了个莫名其妙的cmake版本的问题。
估计是有些依赖的东西是需要顶层目录里读取的。 继续查找相关的脚本和配置, 发现CMakeList.txt里提到了一个BUILD_EXAMPLES变量, 当此变量为真值时会编译samples目录。 但笔者绞尽脑汁也没想出来怎么才能从外部配置这个值, 是用环境变量? cmake参数? 都试了, 没一个管用的。 找来找去发现了OpenCV的文档里有个例子,说明了如何设置变量,是在cmake的命令行传入 -D BUILD_EXAMPLES=ON这样的方式。 如此一来build整个工程时就会自动为samples目录创建Makefile。所以configure的命令变成:
- cmake -D BUILD_EXAMPLES=ON .
生成的例子都在OPENCV_DIR/bin下,大家可以运行看看。(不包括Qt_sample这个例子)
在Qt中使用OpenCV
Qt程序要想用OpenCV的函数需要将opencv的头文件和库在工程pro文件里配置一下,添加INCLUDEPATH和LIBS,具体的方法参考:
http://www.opencv.org.cn/index.php/%E5%9C%A8Qt%E4%B8%AD%E4%BD%BF%E7%94%A8OpenCV%E5%BA%93
另外有一篇更实用更详细的文章, 还提供几个很好的例子, 是绝佳的参考。 大家有问题就仔细看这篇文章, 一般都能得到解答:
http://code.google.com/p/qt-opencv-multithreaded/wiki/Documentation
小结:关于详解在 Qt 程序中使用OpenCV的内容介绍完了,希望本文对你有所帮助。更多相关内容请参考编辑推荐。