OpenCV通过NuGet包与Visual Studio 2015,如何配置?

我试图在Visual Studio 2015中通​​过NuGet包使用OpenCV,我似乎无法完成所有配置。 我不知道我是否在某个地方犯了错误,或者我所尝试的是不支持的。

有一点背景,我在这篇教程中回过头来看:

https://www.youtube.com/watch?v=7SM5OD2pZKY https://github.com/MicrocontrollersAndMore/OpenCV_3_Windows_10_Installation_Tutorial

如果可能的话,我想更新它以使用NuGets。 我每天都会在工作中使用NuGets,所以我对这个概念很熟悉,但我以前只使用NuGets和.Net(Visual Basic或C#)应用程序。

我试图让这个工作与平面简洁的C ++ OpenCV,而不是在一个.NET或UWP应用程序。

为了记录,在单独的.Net测试项目中,我尝试了EmguCV NuGet包:

在这里输入图像描述

随着Visual Studio 2015和一切按预期工作(对于那些不熟悉的人来说,Emgu CV可能是OpenCV中最早/最知名/最稳定的.Net包装器)

以下是我尝试使用NuGets获得常规C ++ OpenCV在Visual Studio 2015中工作的步骤:

启动Visual Studio 2015,制作一个空项目:

在这里输入图像描述

调出NuGet包管理器:

在这里输入图像描述

我选择OpenCV.Win.ImgProc,因为这似乎是唯一可用的OpenCV 3.x NuGet,这也是自动导入的Core,如预期的那样:

在这里输入图像描述

在这里输入图像描述

然后我添加了一个.cpp文件,并将其复制/粘贴到已知的OpenCV代码中,OpenCV库无法识别:

在这里输入图像描述

我尝试了Build - > Clean,Build - > Build,同样的担忧。 我也尝试将“解决方案配置”和“解决方案平台”设置为Debug / Release / x86 / x64,同样的担忧。

我在这里错过了一步吗? NuGets是否只能在.Net或UWP等托管环境中工作,或者他们是否也可以使用常规C ++? 我确实注意到关于UWP的描述中提到:

在这里输入图像描述

但我没有使用VideoIO,所以我不确定这是否重要。

有没有人有这个成功? 我可以一直回到Project - >(project name)Properties中直接引用库的“老派”方式,如上面链接的教程中所示,但如果可能的话,我想使用NuGets。

-----------编辑---------------

我必须在这里将我对Leo-MSFT的回应放在这里,以允许有足够的人物和截图。 感谢Leo-MSFT的建议,但是有两个问题。 首先,这个包是OpenCV 2.4.10,现在已经过时了:

在这里输入图像描述

第二,如果我使用该包,则红色下划线已消失,但在尝试构建和运行时遇到以下链接器错误:

1> ------ Build开始:Project:Test2,Configuration:Debug x64 ------ 1> test.cpp 1> test.obj:error LNK2019:无法解析的外部符号“void __cdecl cv :: fastFree(在函数“public:__cdecl cv :: Mat ::〜Mat(void)”(?? 1Mat @ cv @@ QEAA @ XZ)1> test中引用的“void *)”(?fastFree @ cv @@ YAXPEAX @ Z) obj:错误LNK2019:无法解析的外部符号“public:__cdecl cv :: _ InputArray :: _ InputArray(class cv :: Mat const&)”(?? 0_InputArray @ cv @@ QEAA @ AEBVMat @ 1 @@ Z) 1> test.obj:error LNK2019:无法解析的外部符号“public:__cdecl cv :: _ OutputArray :: _ OutputArray(class cv :: Mat&)”(?? 0_OutputArray @ cv @@ QEAA @ AEAVMat @ 1 @@ Z) in function main 1> test.obj:error LNK2019:函数“public:void __cdecl”中引用的未解析外部符号“public:void __cdecl cv :: Mat :: deallocate(void)”(?deallocate @ Mat @ cv @@ QEAAXXZ) cv :: Mat :: release(void)“(?release @ Mat @ cv @@ QEAAXXZ)1> test.obj:error LNK2019:无法解析的外部符号”public:void __cdecl cv :: Mat :: copySize(class cv: :M 在函数“public:class cv :: Mat&__cdecl cv :: Mat :: operator =(class cv :: Mat const&)”中引用的const&)“(?copySize @ Mat @ cv @@ QEAAXAEBV12 @@ Z) (?? 4Mat @ cv @@ QEAAAEAV01 @ AEBV01 @@ Z)1> test.obj:error 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 @@ QEAAAEAV01 @ AEBV01 @@ Z)中引用1) test.obj:error 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:error LNK2019:无法解析的外部符号“int __cdecl cv :: waitKey(int )在函数main 1中引用的“(?waitKey @ cv @@ YAHH @ Z)”test.obj:error 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:error 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:无法解析的外部符号“void __cdecl cv :: GaussianBlur(class cv :: _ InputArray const&,class cv :: OutputArray const&,class cv :: Size,double,double,int)”(?GaussianBlur @ cv在函数main中引用@@ YAXAEBV_InputArray @ 1 @ AEBV_OutputArray @ 1 @ V $ $ Size_ @ H @ 1 @ NNH @ Z)test.obj:error 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)function main 1> test.obj :错误LNK2 019:无法解析的外部符号“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未解析的外部错误==========构建:0成功, 1失败,0最新,0跳过==========

尝试过各种选项后,我已经解决了这个包:

在这里输入图像描述

这似乎工作,虽然它不是非常有自信的鼓舞人心,它被明确标记为“不是官方软件包”,并且它略微过时(然而从OpenCV 3.1.0到3.2.0并没有太多变化)。 我想我会使用这个,直到发布适当的更新包。


OpenCV库包是OpenCV3.1,而不是OpenCV.Win.ImgProc,用于测试OpenCV代码。

以下是我的测试结果,因此您只需安装OpenCV3.1 NuGet包,而不是OpenCV.Win.ImgProc即可用于该OpenCV代码。

在这里输入图像描述

请注意:OpenCV3.1不是官方软件包。

链接地址: http://www.djcxy.com/p/95157.html

上一篇: OpenCV via NuGet packages with Visual Studio 2015, how to configure?

下一篇: Compiling openCV for ARM on ubuntu