如何在我的cuda代码中使用opencv?

时间:2013-10-09 20:22:32

标签: c opencv cuda gpu libraries

我已经安装了opencv和Cuda。我已经制作了一些opencv代码,现在我想尝试使用CUDA让它运行得更快。问题是opencv GPU模块不满足我。我如何制作一个CUDA代码来包含和使用与我的.cpp文件完全相同的opencv库和函数?我包含了我移动到我的CUDA中的“include”CUDA文件夹所需的.h文件(cv.h highgui.h)代码,但当我尝试使用nvcc编译它时,它说 架构i386的未定义符号:

“_ cvLoadImage”,引自:       _main in tmpxft_000177b6_00000000-14_cuda.o ld:找不到架构i386的符号 collect2:ld返回1退出状态

这意味着它无法理解这些功能,所以就我所见,图书馆没有以正确的方式包含在内。我怎样才能使它工作?

3 个答案:

答案 0 :(得分:1)

据我所知,您不能只在CUDA代码中包含OpenCV函数direclty。 CUDA有自己的编程方式,为CPU制作的代码不能直接在GPU上运行。

我建议您查看documentation以了解CUDA是如何工作的。

如果OpenCV的gpu版本不满足你,你可能应该自己实现这些功能。

你只想在CPU上使用openCV并使用CUDA进行其他计算?

在这种情况下,我认为你必须创建一个包装你的CUDA函数的cpp文件。 您可以像往常一样在C或C ++代码中使用包装函数。

答案 1 :(得分:1)

我认为,“使用OpenCV和CUDA的GPU加速计算机视觉入门”网络研讨会材料应该会有所帮助。您可以在此处找到它们:link

答案 2 :(得分:0)

你最好不要尝试在opencv头文件和nvcc编译器之间混合使用,这是一种不好的做法。

Opencv是在库中构建的,它是使用CMAKE构建的(通常在visual studio下的windows中)

当你在nvcc编译器中包含一个opencv头文件时,你必须包含你从opencv获得的所有“礼物”,例如:opencv代码中预期的外部dll,头文件和外部函数。

我发现在你的情况下最合适的解决方案是编写一个在VS中编译的代码,来回引用你的CUDA代码和Opencv的CUDA(你总是可以使用原语和外部函数)。