将OGRE与OpenCV结合,开发虚拟现实、增强现实应用程序正逐渐流行起来。
Ogre论坛中http://www.ogre3d.org/forums/viewtopic.php?f=5&t=16572&sid=c22bb2276be348c7438a6875d0a8fdb5
此篇帖子给出了一个将Ogre和OpenCV结合,以捕获摄像头数据的插件程序。
该插件使用pTypes库,从链接中下载的工程里已经自带了该库的工程。
所用的开发环境为:WindowsXP+VS2008+OgreSDK1.7.2+OpenCV2.1。
1、编译pTypes库时,木有问题,Debug和Release都很顺利。
2、编译WebcamPlugin时,首先修改链接器->输入->附加依赖项选项中的与OpenCV对应静态库版本(如:cv210.lib cxcore210.lib cvaux210.lib highgui210.lib)。
可能会出现的编译错误:
命名空间CV::同vc2008的冲突错误:
1> Webcam.cpp 1>c:/program files (x86)/microsoft visual studio 10.0/vc/include/complex(42): error C2039:'_C_double_complex' : is not a member of '`global namespace''
1>c:/program files (x86)/microsoft visual studio 10.0/vc/include/complex(42): error C2146: syntax error : missing ';' before identifier '_Dcomplex_value'
1>c:/program files (x86)/microsoft visual studio 10.0/vc/include/complex(42): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Webcam.h头文件中定义的namespace CV{...}与vc2008的complexvalue冲突,
解决方法:删去命名空间CV::。
3、编译WebcamPluginDemo时,
可能出现的编译错误如下:
(1)找不到"pasync.h"头文件;
解决方法:在C/C++->常规->附加包含目录选项中添加../ptypes-1.8.3/include目录。
(2)Opencv内建数据类型与Ogre的内建数据类型冲突:
>c:/opencv2.1/include/opencv/cxtypes.h(178) : error C2872: 'int64' : símbolo ambiguo puede ser 'c:/opencv2.1/include/opencv/cxtypes.h(146) : __int64 int64' o 'c:/ogresdk_vc9_v1-7-2/include/ogre/ogreplatform.h(255) : Ogre::int64'
>c:/opencv2.1/include/opencv/cxtypes.h(179) : error C2872: 'uint64' : símbolo ambiguo puede ser 'c:/opencv2.1/include/opencv/cxtypes.h(147) : unsigned __int64 uint64' o 'c:/ogresdk_vc9_v1-7-2/include/ogre/ogreplatform.h(254) : Ogre::uint64'
被该问题纠结了一天,终于解决了。
恩,究其原因,是在WebcamPluginDemo.h头文件中包含了以下头文件:
#include <Ogre.h>
#include <ExampleApplication.h>
#include <ExampleFrameListener.h>
#include <OgreExternalTextureSourceManager.h>
#include "WebcamController.h"
注意:在ExampleApplication.h头文件中,使用了命名空间using namespace Ogre,然而该例子程序对Opencv库的使用是在WebcamController.h头文件中包含了cv.h和highgui.h,所以,按照此顺序编译程序时,编译OpenCV库时,就会遇到OpenCV定义的数据类型与Ogre定义的数据类型冲突的问题。
解决方法:修改包含WebcamPluginDemo.h头文件中所包含头文件的顺序:
#include "WebcamController.h"
#include <Ogre.h>
#include <ExampleApplication.h>
#include <ExampleFrameListener.h>
#include <OgreExternalTextureSourceManager.h>
如此这样,编译就成功了。
(3)链接时会提示OIS:的一些函数无法解析:
解决方法:在链接器->输入->附加依赖项选项中添加OIS.lib库。
至此,WebcamPlugin和WebcamPluginDemo成功编译。O(∩_∩)O~