转载:https://blog.csdn.net/fioletfly/article/details/47280727?utm_source=blogxgwz0
1. OpenCV3.0 基本的配置
这几天被OpeCV3.0折腾的死去活来的,主要是由于目前Visual studio 在2010 余2013之间切换。所以有的时候自己虽然配置好了,但是为了让这两个版本跑起来总是有各种各样的错误。真的让人感到非常困惑,关于配置这里就不说了,百度一下大把,而且跟2.x版本的配置几乎是一样样的。
VS2013 上的配置:
包含库目录
上面的配置已完成基本就ok了。
VS2010的配置:
2. 问题的产生
举一个简单的例子来说明发生的问题,需找轮廓的函数:findcontours。
<span style="font-size:14px;">void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierar-
chy, int mode, int method, Point offset=Point())</span>
<span style="font-size:14px;">void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierar-
chy, int mode, int method, Point offset=Point())</span>
我以为根据基本的配置,在VS2010余VS2013上面就可以同时跑起来,因为在工程属性中都配置好了,详见上图。跑同样一段代码和处理同样的一幅图片,接下来问题来了。这里要实现告诉大家,我是先使用VS2010,所以openCV3.0也就是最先应用在VS2010上面的,所以在VS2010跑的很欢,但是移植到VS2013时就出现各种奇奇怪怪的问题。
详细的问题见对比图:
VS2010中找到的轮廓点,很正确
VS2013中找到的轮廓点,要崩溃了,这么大
所以这里就直接报错了。
3. 问题的查找
想了半天也不知道错误在哪里,总怀疑自己的图像 有问题,但是查来查去没有没有看到什么名堂。这里我又仔细一边调试边查看代码,终于有提示了
,真的是伟大的VS2013附体啊,不然还真的看不出来啊。
这是几个意思啊,我不是明明加入了进来了吗?哦等等,好像没有,因为这里依赖库只是加入这个几个名字,并没有加入具体的地址。而在依赖库中仅
仅要求lib文件的引用,我心想干脆直接将dll这个文件也引用下来,会不会没有问题。但是好像依然没有效果,也就是说这里不会调用dll,而且这个dll是
不会从依赖库中来调用。后来上网一查,
你的opencv配置的bin目录里面的东西,是在下面面的那个目录下面吧
C:\Windows\System32\opencv_world300d.dll
4. 问题的解决
根据上面提示就知道,只有将...\opencv\build\x86\vc12\bin文件的几个文件夹copy到C:\Windows\System32 就好了。但是问题就解决了一半啊,那VS2010又不能用了,所以这个折腾啊。看来以后尽可能的用在一个平台上面跑吧。
5. 尾巴
这里需要提醒大家:据我实验的是,最新版本的openCV3.0 好像不支持VS2010,因为在build文件里面只有vc11,vc12. 也就是说仅仅支持VS2012,VS2013. 看来要放弃VS2010. 不知道有没有高手可以解决这个问题啊。或者直接在VS2010使用vc11或vc12, 这个没有试过啊,大家可以尝试一下,好像用CMake编译可以使用在VS2010,VS2008,VS2005等。
目前我使用的是openCV3.0 Beta版本是支持vs2010,vs2012,vs2013的。大家可以试试这个版本,beta版本还是比较稳定的。
希望这个能够帮助到大家,这些纠结的人。