c++ - 在 visual studio 中构建示例 opencv 应用程序时出错

标签 c++ visual-studio-2010 opencv visual-studio-2012 opencl

我正在尝试使用 visual studio 2012 构建这个示例 opencv 应用程序:

https://github.com/Itseez/opencv/blob/2.4/samples/ocl/surf_matcher.cpp

为此,我下载并安装了 opencv 2.4.6 并将其安装在我的系统上。

配置 visual studio 2012 以使用它(设置包含路径、库路径和库)

我检查并将 opencv\build\x86\vc11\staticlib 中的所有库添加到我的应用程序(我注意将调试库添加到调试构建和发布库以发布构建)。

我正在编译代码,出现几个链接错误:

Error   1   error LNK2019: unresolved external symbol "public: __thiscall cv::ocl::SURF_OCL::SURF_OCL(double,int,int,bool,float,bool)" (??0SURF_OCL@ocl@cv@@QAE@NHH_NM0@Z) referenced in function "public: __thiscall `anonymous namespace'::SURFDetector<class cv::ocl::SURF_OCL>::SURFDetector<class cv::ocl::SURF_OCL>(double)" (??0?$SURFDetector@VSURF_OCL@ocl@cv@@@?A0x1f01e08d@@QAE@N@Z) 

Error   7   error LNK2001: unresolved external symbol _clReleaseMemObject@4 ConsoleApplication1\opencv_ocl246d.lib(arithm.obj)  

其中有几个,它们似乎都与 ocl 库有关。

要使 OCL 正常工作,我应该添加哪个其他库?

注意事项:

当我尝试编译时,出现以下错误:

'getDeviceInfo' : is not a member of 'cv::ocl::Context' 

关于这段代码:

if(!useCPU)
{
    std::cout
            << "Device name:"
            << cv::ocl::Context::getContext()->getDeviceInfo().deviceName
            << std::endl;
}

这个错误似乎与附近的不同 ocl.hpp 有关。我使用的是github版本(详见答案),更改了它需要的头文件后,编译错误解决了。

最佳答案

OpenCV 有多个版本。其中一个 cv::ocl::Context 没有 getDeviceInfo 方法。 http://fossies.org/dox/opencv-2.4.6.1/classcv_1_1ocl_1_1Context.html

第二个:https://github.com/Itseez/opencv/blob/master/modules/ocl/include/opencv2/ocl.hpp有它。我认为你应该使用 github 的版本。

更新:

我认为你需要构建github版本的库来解决第一个链接错误。你错过了https://github.com/Itseez/opencv/blob/master/modules/nonfree/src/surf.ocl.cpp .您还必须安装 OpenCL SDK(Intel、AMD 或 CUDA,具体取决于您的显卡)以解决另一个问题。

英伟达:https://developer.nvidia.com/opencl

AMD(CPU 和 GPU):http://developer.amd.com/resources/heterogeneous-computing/opencl-zone/

英特尔(CPU 和 GPU):http://software.intel.com/en-us/vcsource/tools/opencl-sdk

关于c++ - 在 visual studio 中构建示例 opencv 应用程序时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19456241/

相关文章:

python - 从网络摄像头拍摄图像

c++ - 虚方法和虚表查找的最终说明符

visual-studio - Visual Studio 2010 的发布功能是否每次都推送所有文件?

c++ - 无法在 C/C++ 代码中单击鼠标

c# - 为什么过时会导致错误?

opencv - 直方图均衡不适用于彩色图像

java - OpenCV Android - 尝试使示例应用程序工作

c++ - 无法使用 Boost GIL 检测图像文件类型(未捕获异常)

c++ - 为什么没有提供 std::regex_traits<char32_t> 的定义(因此没有提供 std::basic_regex<char32_t>)?

c++ - 'return *this' 实际上是做什么的?