Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CUDA在Visual Studio 2012中构建OpenCV_Opencv_Visual Studio 2012_Cuda - Fatal编程技术网

使用CUDA在Visual Studio 2012中构建OpenCV

使用CUDA在Visual Studio 2012中构建OpenCV,opencv,visual-studio-2012,cuda,Opencv,Visual Studio 2012,Cuda,我需要用Visual Studio 2012编译OpenCV 2.4.5。我特别感兴趣的是用CUDA5.0编译gpu模块 为了在VS2012中启用CUDA编译,我遵循了以下步骤 我使用CMake创建VS2012解决方案,然后针对每个.cu文件,我将元素类型从“自定义构建规则”更改为“CUDA C/C++” 我可以编译大多数项目文件,但在一些文件上我遇到了一个恼人的问题 例如,fgd_bgfg.cu原因 错误C2039:“ParameterType”:不是的成员 'cv::gpu::device:

我需要用Visual Studio 2012编译OpenCV 2.4.5。我特别感兴趣的是用CUDA5.0编译gpu模块

为了在VS2012中启用CUDA编译,我遵循了以下步骤

我使用CMake创建VS2012解决方案,然后针对每个.cu文件,我将元素类型从“自定义构建规则”更改为“CUDA C/C++”

我可以编译大多数项目文件,但在一些文件上我遇到了一个恼人的问题

例如,fgd_bgfg.cu原因

错误C2039:“ParameterType”:不是的成员 'cv::gpu::device::TypeTraits'

但在type_traits.hpp中,我可以读取

typedef typename type_traits_detail::Select<IsSimpleParameter<UnqualifiedType>::value,
            T, typename type_traits_detail::AddParameterType<T>::type>::type ParameterType;
typedef typename type\u traits\u detail::Select::type ParameterType;
这真是一个我无法摆脱的恼人问题


我不敢相信没有人已经用VS2012和GPU构建了opencv,一些建议?

看起来CUDA编译器无法处理模板特征技术。一种简单的方法是使用三种基本类型指定TypeTraits模板:double、float、int。我不确定这种方法是否正确,但CUDA编译器不会抱怨

代码在此列出:

template<> struct TypeTraits<double>
{
    typedef type_traits_detail::UnConst<double>::type                                                NonConstType;
    typedef type_traits_detail::UnVolatile<double>::type                                             NonVolatileType;
    typedef type_traits_detail::UnVolatile<typename type_traits_detail::UnConst<double>::type>::type UnqualifiedType;
    typedef type_traits_detail::PointerTraits<double>::type                            PointeeType;
    typedef type_traits_detail::ReferenceTraits<double>::type                                        ReferredType;

    enum { isConst          = type_traits_detail::UnConst<double>::value };
    enum { isVolatile       = type_traits_detail::UnVolatile<double>::value };

    enum { isReference      = type_traits_detail::ReferenceTraits<double>::value };
    enum { isPointer        = type_traits_detail::PointerTraits<typename type_traits_detail::ReferenceTraits<double>::type>::value };

    enum { isUnsignedInt    = type_traits_detail::IsUnsignedIntegral<double>::value };
    enum { isSignedInt      = type_traits_detail::IsSignedIntergral<double>::value };
    enum { isIntegral       = type_traits_detail::IsIntegral<double>::value };
    enum { isFloat          = type_traits_detail::IsFloat<double>::value };
    enum { isArith          = isIntegral || isFloat };
    enum { isVec            = type_traits_detail::IsVec<double>::value };

    typedef double ParameterType;
};
template<> struct TypeTraits<float>
{
    typedef type_traits_detail::UnConst<float>::type                                                NonConstType;
    typedef type_traits_detail::UnVolatile<float>::type                                             NonVolatileType;
    typedef type_traits_detail::UnVolatile<typename type_traits_detail::UnConst<float>::type>::type UnqualifiedType;
    typedef type_traits_detail::PointerTraits<float>::type                            PointeeType;
    typedef type_traits_detail::ReferenceTraits<float>::type                                        ReferredType;

    enum { isConst          = type_traits_detail::UnConst<float>::value };
    enum { isVolatile       = type_traits_detail::UnVolatile<float>::value };

    enum { isReference      = type_traits_detail::ReferenceTraits<float>::value };
    enum { isPointer        = type_traits_detail::PointerTraits<typename type_traits_detail::ReferenceTraits<float>::type>::value };

    enum { isUnsignedInt    = type_traits_detail::IsUnsignedIntegral<float>::value };
    enum { isSignedInt      = type_traits_detail::IsSignedIntergral<float>::value };
    enum { isIntegral       = type_traits_detail::IsIntegral<float>::value };
    enum { isFloat          = type_traits_detail::IsFloat<float>::value };
    enum { isArith          = isIntegral || isFloat };
    enum { isVec            = type_traits_detail::IsVec<float>::value };

    typedef float ParameterType;
};

template<> struct TypeTraits<int>
{
    typedef type_traits_detail::UnConst<int>::type                                                NonConstType;
    typedef type_traits_detail::UnVolatile<int>::type                                             NonVolatileType;
    typedef type_traits_detail::UnVolatile<typename type_traits_detail::UnConst<int>::type>::type UnqualifiedType;
    typedef type_traits_detail::PointerTraits<int>::type                            PointeeType;
    typedef type_traits_detail::ReferenceTraits<int>::type                                        ReferredType;

    enum { isConst          = type_traits_detail::UnConst<int>::value };
    enum { isVolatile       = type_traits_detail::UnVolatile<int>::value };

    enum { isReference      = type_traits_detail::ReferenceTraits<int>::value };
    enum { isPointer        = type_traits_detail::PointerTraits<typename type_traits_detail::ReferenceTraits<int>::type>::value };

    enum { isUnsignedInt    = type_traits_detail::IsUnsignedIntegral<int>::value };
    enum { isSignedInt      = type_traits_detail::IsSignedIntergral<int>::value };
    enum { isIntegral       = type_traits_detail::IsIntegral<int>::value };
    enum { isFloat          = type_traits_detail::IsFloat<int>::value };
    enum { isArith          = isIntegral || isFloat };
    enum { isVec            = type_traits_detail::IsVec<int>::value };

    typedef int ParameterType;
};
模板结构类型特征
{
typedef type_traits_detail::UnConst::type NonConstType;
typedef type_traits_detail::UnVolatile::type NonVolatileType;
typedef type_traits_detail::UnVolatile::type UnqualifiedType;
typedef type_traits_detail::PointerTraits::type PointeeType;
typedef type_traits_detail::ReferenceTraits::type referedType;
枚举{isConst=type_traits_detail::UnConst::value};
枚举{isVolatile=type_traits_detail::UnVolatile::value};
枚举{isReference=type_traits_detail::ReferenceTraits::value};
枚举{isPointer=type_traits_detail::PointerTraits::value};
枚举{isUnsignedInt=type_traits_detail::IsUnsignedIntegral::value};
枚举{isSignedInt=type_traits_detail::IsSignedIntergral::value};
枚举{isIntegral=type_traits_detail::isIntegral::value};
枚举{isFloat=type_traits_detail::isFloat::value};
枚举{isArith=isIntegral | | isFloat};
枚举{isVec=type_traits_detail::isVec::value};
typedef双参数类型;
};
模板结构类型特征
{
typedef type_traits_detail::UnConst::type NonConstType;
typedef type_traits_detail::UnVolatile::type NonVolatileType;
typedef type_traits_detail::UnVolatile::type UnqualifiedType;
typedef type_traits_detail::PointerTraits::type PointeeType;
typedef type_traits_detail::ReferenceTraits::type referedType;
枚举{isConst=type_traits_detail::UnConst::value};
枚举{isVolatile=type_traits_detail::UnVolatile::value};
枚举{isReference=type_traits_detail::ReferenceTraits::value};
枚举{isPointer=type_traits_detail::PointerTraits::value};
枚举{isUnsignedInt=type_traits_detail::IsUnsignedIntegral::value};
枚举{isSignedInt=type_traits_detail::IsSignedIntergral::value};
枚举{isIntegral=type_traits_detail::isIntegral::value};
枚举{isFloat=type_traits_detail::isFloat::value};
枚举{isArith=isIntegral | | isFloat};
枚举{isVec=type_traits_detail::isVec::value};
typedef float参数type;
};
模板结构类型特征
{
typedef type_traits_detail::UnConst::type NonConstType;
typedef type_traits_detail::UnVolatile::type NonVolatileType;
typedef type_traits_detail::UnVolatile::type UnqualifiedType;
typedef type_traits_detail::PointerTraits::type PointeeType;
typedef type_traits_detail::ReferenceTraits::type referedType;
枚举{isConst=type_traits_detail::UnConst::value};
枚举{isVolatile=type_traits_detail::UnVolatile::value};
枚举{isReference=type_traits_detail::ReferenceTraits::value};
枚举{isPointer=type_traits_detail::PointerTraits::value};
枚举{isUnsignedInt=type_traits_detail::IsUnsignedIntegral::value};
枚举{isSignedInt=type_traits_detail::IsSignedIntergral::value};
枚举{isIntegral=type_traits_detail::isIntegral::value};
枚举{isFloat=type_traits_detail::isFloat::value};
枚举{isArith=isIntegral | | isFloat};
枚举{isVec=type_traits_detail::isVec::value};
typedef int参数类型;
};
将type_traits.hpp中的代码复制到原始TypeTraits定义的后面。建造…然后捕食

祝你好运!
:-D

CUDA并不正式支持VS2012,因此在VS2012中使用CUDA构建OpenCV不起作用也就不足为奇了。我知道这一点,但很多人已经用一些技巧与CUDA合作,比如我在问题中链接的技巧。此外,OpenCV预构建库已经包含VS2012二进制文件。我觉得很奇怪,没有人尝试用VS2012编译GPU模块。我能够用最新的CUDA 5.5 RC在VS2012中构建OpenCV(该版本正式支持VS2012)。只有一个问题:您应该将CMake变量CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE设置为OFF。我会尽快尝试,您编译了哪个版本的OpenCV?我编译了主分支。但是最新的OpenCV版本(2.4.6)也支持CUDA 5.5,所以它也应该可以工作。使用主分支,我构建了支持VS2012和CUDA的Emgu x64版本。为此,我必须做一些修改:1.修改Build_Binary_x86.bat以启用CUDA mod