首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使CUDA-模块在OpenCV 3.0测试版下工作

无法使CUDA-模块在OpenCV 3.0测试版下工作
EN

Stack Overflow用户
提问于 2015-06-20 23:39:09
回答 1查看 2.3K关注 0票数 0

在它的生命周期内,我无法让CUDA模块在OpenCV3.0Beta下与Visual Studio2013 64位专业版、CUDA SDK 6.5和Win7 64位一起工作。半年前,我用过的示例代码在OpenCV3.0Alpha上运行得天衣无缝。现在我甚至不能让cv:: CUDA ::flip工作;代码一直工作,直到它应该将Mat上传到CUDA,但随后它停止工作。

谁能提供一个有效的示例代码,这样我就可以看到我忽略了什么?

我之前做的所有步骤:

在使用CUDA和OpenGL构建OpenCV3.0Beta并启用CMake和MSVC2013专业版之后,我在调试和发布OpenCV3.0Beta配置中构建了OpenCV.sln (显示为分别成功构建: 266 )。在那之后,我在模块/smaples/include和data文件夹中的Debug/Release X64-Config中构建了INSTALL.vcxproj,所以它们都会被复制到安装文件夹中。

在属性C++常规下:

包含D:\Programme\glew-1.12.0\ D:\OpenCV\GebautmitCUDAohneTBB\install\include D:\Programme\freeglut\include

在属性链接器常规下:

D:\OpenCV\GebautmitCUDAohneTBB\install\x64\vc12\lib D:\Programme\glew-1.12.0\lib\Release\x64 D:\Programme\freeglut\lib\x64

在属性链接器输入下:

通常的OpenCV-libs,glew32.lib,freeglut.lib

下面是我的示例代码:

代码语言:javascript
复制
#if defined _MSC_VER && _MSC_VER >= 1400
#pragma warning(disable : 4100)
#endif

#include <iostream>
#include <iomanip>
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/core/cuda.hpp"
#include "opencv2/cudaimgproc.hpp"
#include "opencv2/cudawarping.hpp"

using namespace std;
using namespace cv;
using namespace cv::cuda;

int main() {
/*
if (getCudaEnabledDeviceCount() == 0)
{
return cerr << "No GPU found or the library is compiled without CUDA  support" << endl, -1;
}

cv::cuda::printShortCudaDeviceInfo(cv::cuda::getDevice());
*/
Mat image, image2, imagedownloaded, demoimage, grayimage;

image = imread("fruits.jpg", 1);

if (image.channels() == 1)
{
    cout << "1 channel";
}
else
{
    cout << "3 channel";
}

cv::cvtColor(image, image, COLOR_BGR2GRAY);

GpuMat image_gpu, gray_gpu, demo_gpu, image_gpu2;

image_gpu2.upload(image);

cv::cuda::demosaicing(image_gpu2, demo_gpu, COLOR_BayerGR2BGR, 3);

demo_gpu.download(demoimage);

if (demoimage.channels() == 1)
{
    cout << "1 channel";
}
else
{
    cout << "3 channel";
}

imshow("bla2", image);
imshow("bla3", demoimage);
waitKey();
return 0;

}

有没有人能指出我忘了什么,这样它就可以再次工作了?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-06-22 01:03:58

我找到了问题的解决方案:我发现我的代码和opencv-gpu-samples在大约1分钟内不能工作,但在那之后它就完美无缺了。所以我在google上搜索了这个问题,并发现,CUDA显然需要在运行时再次编译代码,以使他们的Cubin/PTX文件在gpu上正常工作(我对此的理解)。

所以我看了看我的CMake配置(来自OpenCV/Source的标准配置),它只是使用Arch-Bins 1.0 - 3.0构建OpenCV-CUDA-Config,而我有一个具有5.2计算能力的GTX970。

在将CMake- CUDA -Arch-Bin和PTX-Setting更改为5.0并再次使用CUDA和OpenGL构建OpenCV后,CUDA运行良好,并且具有预期的速度:)此外,使用CUDA的OpenCV的构建时间也大大缩短(因为只有一个Arch-Bin/PTX-Build-Setting),从2h到25分钟。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30955811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档