VC2010下编译OpenCV3.2问题记录

本文记录了在工作需求下使用VC2010编译OpenCV3.2 tracking扩展库的过程及遇到的问题解决方案,包括CMAKE配置错误处理、路径设置问题、sqrt函数类型转换与dnn模块显式实例化冲突等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作需要编译OpenCV3.2的tracking库,这是一个扩展库,整个过程遇到一些问题,记录如下:

1、使用CMAKE配置时,有几处提示错误。如download_protobuf.cmake出错。可能是文件下载地址的问题,从网上搜索对应的文件,手动下载。通过。此外工程路径要避免中文,否则会有意外的错误,提示某些变量未找到。

2、产生的sln文件在VC2010下编译,出现dll和exe共100个(92成功,未成功的是exe,路径设置问题),没有出现contrib扩展库。后来重新检查CMAKE配置,在OPENCV_EXTRA_MOUDLES_PATH 项里添加opencv_contrib-master的moudles路径,重新生成sln,编译出现contrib扩展项目。
 
3、重新编译OpenCV,出现错误:
error C2668: "sqrt": 对重载函数的调用不明确
原因:VC++2010对sqrt函数有两个重载;float sqrt(float)和double sqrt(double),如果传入int型则无法明确转换类型,需要加类型转换。

4、继续编译OpenCV,出现如下error:
VS2010 error C3416:“cv::dnn::createLayerFromCaffe”: 显式专用化可能无法显式实例化。导致cv:dnn和tracking项目编译失败。
解决办法:
OpenCV3.2官方要求VC2013编译,VC2013基本支持C++11标准,对函数模板的显式实例化、显式具体化可以同时存在,但显式实例化不起作用。VC2010使用的是C++03标准,两者不能同时进行,所以在VC2010中注掉冲突的显式实例化代码即可。
示例代码(注掉后者):
//Explicit specialization 
template<>
Ptr<Layer> createLayerFromCaffe<ConvolutionLayer>(LayerParams &params)
{
    Ptr<BaseConvolutionLayer> l = ConvolutionLayer::create();
    initConvDeconvLayerFromCaffe(l, params);
    return Ptr<Layer>(l);
}
 
//Explicit instantiation
template Ptr<Layer> createLayerFromCaffe<ConvolutionLayer>(LayerParams&);  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值