之前一直用Qt+OpenCV开发项目,而在VS中直接偷懒使用预编译的OpenCV进行开发,结果在使用OpenGL时提示”No OpenGL support”:
上网查了一下,原因很明显,是因为预编译好的library不支持OpenGL,因此需要使用cmake重新build工程。我的开发环境是:Win 8.1+VS2013+OpenCV 2.4.9。
从OpenCV2.4.2版本开始,OpenCV在可视化窗口中支持OpenGL,在highgui的模块中可找到接口。这使得OpenCV可以轻松渲染任何3D内容。但是OpenCV默认不启用OpenGL支持,因此需设置标志ENABLE_OPENGL=
YES,(默认ENABLE_OPENGL = NO)。
在本次配置成功后,将演示在OpenCV的显示输出中嵌入OpenGL的3D物体。整个流程如下:
一、生成OpenCV解决方案
安装CMake并打开,在第一行“Where is the source code”后面的那个“Browse Source…”按钮,选择OpenCV的安装路径。我的Opencv2.0安装路径为E:/opencv/opencv/,这里需要选择source文件夹;点击第二行的“Browse Build…”按钮并选择生成的解决方案的路径。这里放置在E:/opencv/OpencvBuild文件夹中,设定完成后点击左下方的configure。
在弹出的对话框中选择编译器版本Visual Studio 12(即Visual Studio 2013),点击Finish。
在下面的编译参数设置中找到WITH_OPENGL,打上勾,再次点击Configure。
再次点击Configure,完成后点击Generate,关闭CMake。至此编译前的配置工作全部完成。
二、在VS中编译OpenCV
用VS2013打开E:\opencv\OpencvBuild下的OpenCV.sln。在编译之前,确认解决方案平台为Debug|Win 32。右键点击项目ALL_BUILD,选择生成;完成之后找到CMakeTargets->INSTALL,再次选择生成。
等待生成完毕。若第一次选择的解决方案平台选择的是Debug 32位,则将解决方案配置改为Release,然后等待再次依次生成ALL_BUILD和INSTALL,至此OpenCV的编译工作完成。
(这里可能会出现编译的错误。根据网上的介绍,OpenGL在VS中是支持的,不需要安装,但若出现编译不通过的情况,可尝试在所有使用<gl\gl.h>
头文件的地方前都添加#include <windows.h>
)
三、在VS中配置OpenCV
这里用VS属性表的方式配置OpenCV工程,每次只需要添加属性表即可完成配置,比手工界面配置方便很多。 属性管理器 -> 右键 “test”(工程名) -> 添加现有属性。
修改项目属性表的名字后点击“添加”,即可在属性管理器中见到我们新建的属性表(这里取名为opencv)。
右键点击我们刚建立的属性表并点击“属性”,在弹出的窗口中点击“VC++目录”,点击右侧的“包含目录”,添加:E:\opencv\OpencvBuild\install\include
同样地,在“库目录”添加:E:\opencv\OpencvBuild\lib\Debug
点开“链接器”->输入->附加依赖项,按照需要添加相应的库文件:
用同样的方式,向“Release | Win32”属性中添加属性表,并对属性表进行以下配置:
在“包含目录”添加:E:\opencv\OpencvBuild\install\include
在“库目录”添加:E:\opencv\OpencvBuild\lib\Release
向“附加依赖项”添加:E:\opencv\OpencvBuild\install\include\Release下的库文件。
在VS完成以上配置后,剩下的最后一步是添加系统变量Path:E:\opencv\OpencvBuild\install\x86\vc12\bin;
四、简单的演示
至此所有关于OpenCV和OpenGL的配置均已完成,接下来就是试验以下用OpenCV建立OpenGL窗口,这里打开一个现实增强的工程,在属性管理器中Debug|Win32处右击,选择“添加现有属性表”,选择之前生成的opencv属性表(把属性表文件事先放到该工程文件夹中):
编译现实增强项目并生成可执行文件后,输入图像即可得到OpenGL渲染的3D绘图。