use*_*002 5 opencv cuda image-processing opencl
我真的需要一些帮助和建议,因为我是实时图像处理的新手.
我正在尝试为相机获得1000fps的系统实现算法,我需要获取所有图像中每个像素的值,并对N个图像中像素[i] [j]的演变进行不同的计算,对于图像中的所有像素.我有(unsigned char*ptr)我想将它们传输到GPU并开始使用CUDA实现算法并将数据返回给CPU.但我不确定什么是实时处理的最佳选择.我的系统:CPU Intel Xeon x5660 2.8Ghz(2个处理器)GPU NVIDIA Quadro 5000的问题是我想确保在获得1000fps并将它们传递给GPU进行处理时,我怎样才能确保我不会丢失下一次从抓取器传来的任何数据?我需要在c ++中实现多线程吗?和OpenCV/OpenCL/CUDA中的parralel编程?如果您有任何想法或建议,请告诉我.我真的需要一些专家的实时图像处理建议.谢谢
kar*_*lip 14
如您所知,OpenCV使用CUDA框架在GPU中实现了它的一些功能.
您可以编写自己的CUDA代码/函数来操作数据并将其转换为OpenCV格式而不会出现任何问题.我演示了如何在cuda-grayscale上执行此操作.我想这个例子可以回答你的大部分问题.
请注意,OpenCV 2.3.1使用CUDA 4.0,而OpenCV 2.4仅适用于CUDA 4.1.
关于这个声明:
我希望确保在获得1000fps时将其传递给GPU进行处理
您很可能无法像从相机那样快速处理帧.如果你不想丢弃任何帧,你可以忘记实时(我假设你没有使用非常小的图像(10x15)).
如果您真的需要使用1000 FPS,则必须实现缓冲机制来存储来自设备的帧.这就是我们开始讨论多线程系统的实现的地方:应用程序的主线程负责从相机中获取帧并将它们存储在缓冲区中,第二个线程将从缓冲区中读取并执行对帧进行处理.
有关如何实现缓冲机制的信息,请检查:
如何实现cv :: Mat对象(OpenCV)的循环缓冲区?