【发布时间】:2017-07-08 03:05:38
【问题描述】:
我正在尝试通过 NuGet 包将 OpenCV 与 Visual Studio 2015 一起使用,但我似乎无法配置所有内容。我不确定我是否在某个地方犯了错误,或者我正在尝试的内容不受支持。
一点背景知识,我不久前制作了这个教程:
https://www.youtube.com/watch?v=7SM5OD2pZKY https://github.com/MicrocontrollersAndMore/OpenCV_3_Windows_10_Installation_Tutorial
如果可能的话,我想更新它以使用 NuGet。我每天都在工作中使用 NuGet,因此我对这个概念很熟悉,但我以前只在 .Net(Visual Basic 或 C#)应用程序中使用过 NuGet。
我正在尝试使用平面 jane C++ OpenCV 来完成这项工作,而不是在 .NET 或 UWP 应用程序中。
作为记录,在一个单独的 .Net 测试项目中,我尝试了 EmguCV NuGet 包:
使用 Visual Studio 2015,一切都按预期工作(对于那些不熟悉的人,Emgu CV 可能是 OpenCV 最古老/最知名/最稳定的 .Net 包装器)
以下是我尝试使用 NuGet 让常规 C++ OpenCV 在 Visual Studio 2015 中工作的步骤:
启动 Visual Studio 2015,创建一个空项目:
调出 NuGet 包管理器:
我选择了 OpenCV.Win.ImgProc,因为它似乎是唯一可用的 OpenCV 3.x NuGet,这也是按预期自动导入的核心:
然后我添加了一个 .cpp 文件并复制/粘贴到已知良好的 OpenCV 代码中,OpenCV 库无法识别:
我试过 Build -> Clean,Build -> Build,同样的问题。我还尝试将“解决方案配置”和“解决方案平台”设置为 Debug / Release / x86 / x64,同样的问题。
我在这里错过了一步吗? NuGet 是否仅在 .Net 或 UWP 等托管环境中工作,或者它们也可以与常规 C++ 一起工作?我确实注意到描述中提到了 UWP:
但我没有使用 VideoIO,所以我不确定这是否重要。
有人在这方面取得了成功吗?我总是可以回到“老派”方式直接引用 Project -> (project name) Properties 中的库,如上面链接到的教程中所示,但如果可能的话,我想使用 NuGets。
----------- 编辑---------------
我必须将我对 Leo-MSFT 的回复放在此处,以便有足够的字符和屏幕截图。感谢 Leo-MSFT 的建议,但有两个问题。一方面,该软件包是 OpenCV 2.4.10,现在已经非常过时了:
第二,如果我使用该包,红色下划线消失了,但是当我尝试构建和运行时出现以下链接器错误:
1>----- 构建开始:项目:Test2,配置:Debug x64 ------ 1> 测试.cpp 1>test.obj: 错误 LNK2019: 函数“public: __cdecl cv::Mat::~Mat”中引用的未解析外部符号“void __cdecl cv::fastFree(void *)”(?fastFree@cv@@YAXPEAX@Z) (void)" (??1Mat@cv@@QEAA@XZ) 1>test.obj : 错误 LNK2019: 无法解析的外部符号“public: __cdecl cv::_InputArray::_InputArray(class cv::Mat const &)” (??0_InputArray@cv@@QEAA@AEBVMat@1@@Z)在函数 main 中引用 1>test.obj:错误LNK2019:引用了未解析的外部符号“public:__cdecl cv::_OutputArray::_OutputArray(class cv::Mat &)”(??0_OutputArray@cv@@QEAA@AEAVMat@1@@Z)在功能主 1>test.obj : 错误 LNK2019: 未解析的外部符号“public: void __cdecl cv::Mat::deallocate(void)” (?deallocate@Mat@cv@@QEAAXXZ) 在函数“public: void __cdecl cv:: Mat::release(void)" (?release@Mat@cv@@QEAAXXZ) 1>test.obj : 错误 LNK2019: 未解析的外部符号“public: void __cdecl cv::Mat::copySize(class cv::Mat const &)” (?copySize@Mat@cv@@QEAAXAEBV12@@Z) 中引用函数“公共:类 cv::Mat & __cdecl cv::Mat::operator=(类 cv::Mat const &)”(??4Mat@cv@@QEAAAAEAV01@AEBV01@@Z) 1>test.obj:错误 LNK2019:未解析的外部符号“int __cdecl cv::_interlockedExchangeAdd(int *,int)”(?_interlockedExchangeAdd@cv@@YAHPEAHH@Z) 在函数“public: class cv::Mat & __cdecl”中引用cv::Mat::operator=(class cv::Mat const &)" (??4Mat@cv@@QEAAAAEAV01@AEBV01@@Z) 1>test.obj:错误 LNK2019:无法解析的外部符号“void __cdecl cv::namedWindow(class std::basic_string,class std::allocator > const &,int)”(?namedWindow@cv@@YAXAEBV?$basic_string@ DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) 在函数 main 中引用 1>test.obj:错误 LNK2019:函数 main 中引用的未解析外部符号“int __cdecl cv::waitKey(int)”(?waitKey@cv@@YAHH@Z) 1>test.obj:错误 LNK2019:无法解析的外部符号“void __cdecl cv::imshow(class std::basic_string,class std::allocator > const &,class cv::_InputArray const &)”(?imshow@cv@ @YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBV_InputArray@1@@Z) 在函数 main 中引用 1>test.obj : 错误 LNK2019: 无法解析的外部符号 "class cv::Mat __cdecl cv::imread(class std::basic_string,class std::allocator > const &,int)" (?imread@cv@@YA ?AVMat@1@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) 在函数 main 中引用 1>test.obj : error LNK2019: unresolved external symbol "void __cdecl cv::GaussianBlur(class cv::_InputArray const &,class cv::OutputArray const &,class cv::Size,double ,double,int)" (?GaussianBlur@cv@@YAXAEBV_InputArray@1@AEBV_OutputArray@1@V?$Size_@H@1@NNH@Z) 在函数 main 中引用 1>test.obj:错误 LNK2019:无法解析的外部符号“void __cdecl cv::Canny(class cv::_InputArray const &,class cv::_OutputArray const &,double,double,int,bool)”(?Canny@cv @@YAXAEBV_InputArray@1@AEBV_OutputArray@1@NNH_N@Z) 在函数 main 中引用 1>test.obj:错误 LNK2019:无法解析的外部符号“void __cdecl cv::cvtColor(class cv::_InputArray const &,class cv::_OutputArray const &,int,int)”(?cvtColor@cv@@YAXAEBV_InputArray@ 1@AEBV_OutputArray@1@HH@Z) 在函数 main 中引用 1>C:\Users\cdahms\Documents\Test2\x64\Debug\Test2.exe : 致命错误 LNK1120: 13 unresolved externals ========== 构建:0 成功,1 失败,0 最新,0 跳过 ==========
在尝试了各种选择之后,我选择了这个包:
这似乎可行,尽管它被明确标记为“不是官方软件包”并且有点过时(然而从 OpenCV 3.1.0 到 3.2.0 的变化并不多)并不是很有信心。我想在发布适当的更新包之前我会使用它。
【问题讨论】:
标签: c++ visual-studio opencv nuget