为实时图像处理提供建议
我真的需要一些帮助和建议,因为我是新的实时图像处理。
我试图为一个系统实现一个摄像机获得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编程? 如果您有任何想法或建议,请告诉我。 我真的需要一些实时图像处理建议的专家。 谢谢
如您所知,OpenCV在GPU中也使用CUDA框架实现了它的一些功能。
您可以编写自己的CUDA代码/函数来对数据进行操作,并将其转换为OpenCV格式,而不会出现任何问题。 我演示了如何在cuda灰度上执行此操作。 我想这个例子回答了你的大部分问题。
请注意, OpenCV 2.3.1使用CUDA 4.0 ,而OpenCV 2.4仅适用于CUDA 4.1 。
关于这个声明:
我想确保在获得1000fps的同时将它们传递给GPU进行处理
最有可能的是,您无法像处理相机一样快速处理相框。 如果你不想丢弃任何帧,你可以忘记实时 (我假设你没有使用令人难以置信的小图像(10x15))。
如果您确实需要使用1000 FPS,则必须实施缓冲机制来存储来自设备的帧。 这就是我们开始讨论多线程系统实现的地方:应用程序的主线程将负责从摄像头获取帧并将它们存储在缓冲区中, 第二个线程将从缓冲区中读取并执行在帧上处理。
有关如何实现缓冲机制的信息,请检查:
如何实现cv :: Mat对象(OpenCV)的循环缓冲区?
线程安全实现循环缓冲区
C + OpenCV:带循环缓冲区的IplImage
链接地址: http://www.djcxy.com/p/25387.html