0

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

“_cvLoadImage”,引用自:tmpxft_000177b6_00000000-14_cuda.o 中的 _main ld:未找到架构 i386 collect2 的符号:ld 返回 1 个退出状态

这意味着它不了解这些功能,因此据我所知,这些库没有以正确的方式包含在内。我怎样才能让它工作?

4

3 回答 3

1

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

我建议您查看文档以了解 CUDA 的工作原理。

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

或者

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

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

于 2013-10-10T02:32:55.023 回答
1

我认为,“使用 OpenCV 和 CUDA 开始使用 GPU 加速的计算机视觉”网络研讨会材料应该会有所帮助。你可以在这里找到它们:链接

于 2013-10-10T15:01:12.460 回答
0

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

Opencv 内置在使用 CMAKE 构建的库中(通常在 Visual Studio 下的 Windows 中)

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

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

于 2016-03-13T06:51:21.527 回答