在它的生命周期内,我无法让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
下面是我的示例代码:
#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;
}有没有人能指出我忘了什么,这样它就可以再次工作了?
谢谢。
发布于 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分钟。
https://stackoverflow.com/questions/30955811
复制相似问题